> 데이터 베이스 > MySQL 튜토리얼 > 내 SQL 쿼리에서 '열은 GROUP BY 절에 나타나거나 집계 함수에 사용되어야 합니다.' 오류가 발생하는 이유는 무엇입니까?

내 SQL 쿼리에서 '열은 GROUP BY 절에 나타나거나 집계 함수에 사용되어야 합니다.' 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-18 13:52:09
원래의
395명이 탐색했습니다.

Why Does My SQL Query Throw a

"GROUP BY 절에 나타나거나 집계 함수에 사용되어야 합니다" SQL 오류 해결

쿼리가 데이터를 그룹화하지만(GROUP BY 사용) 그룹화에 포함되지 않은 열을 선택할 때 "열 "makerar.wmname"은 GROUP BY 절에 나타나거나 집계 함수에 사용되어야 합니다."라는 SQL 오류가 발생합니다. SQL에서는 GROUP BY 절에 없는 선택된 열을 집계(예: MAX, MIN, AVG, SUM, COUNT 사용)하거나 생략해야 합니다.

해결책:

이 문제를 해결하기 위한 몇 가지 접근 방식은 다음과 같습니다.

  1. wmname 절에 GROUP BY 포함:

    각 고유 wmname과 관련된 모든 cname 값이 필요한 경우 가장 간단한 솔루션입니다.

    <code class="language-sql">SELECT cname, wmname, MAX(avg)
    FROM makerar
    GROUP BY cname, wmname;</code>
    로그인 후 복사
  2. 최대값 및 JOIN에 대한 하위 쿼리:

    이 접근 방식은 각 wmname에 대해 최대 avg에 해당하는 cname만 필요할 때 유용합니다.

    <code class="language-sql">SELECT m.cname, m.wmname, t.mx
    FROM (
        SELECT cname, MAX(avg) AS mx
        FROM makerar
        GROUP BY cname
    ) t
    JOIN makerar m ON m.cname = t.cname AND m.avg = t.mx;</code>
    로그인 후 복사

    이것은 먼저 하위 쿼리의 각 avg에 대한 최대 cname를 찾습니다. 그런 다음 이 결과를 원래 테이블에 다시 조인하여 해당 wmname.

    을 검색합니다.
  3. 창 기능(지원되는 경우):

    귀하의 데이터베이스 시스템이 창 기능을 지원하는 경우(대부분의 최신 시스템이 지원함) 이는 간결하고 효율적인 솔루션을 제공합니다.

    <code class="language-sql">SELECT cname, wmname, MAX(avg) OVER (PARTITION BY cname) AS mx
    FROM makerar;</code>
    로그인 후 복사

    창 함수는 원래 행 구조를 변경하지 않고 각 avg 파티션에 대해 최대 cname를 계산합니다. 고유한 결과만 원하는 경우 DISTINCT가 필요할 수 있습니다.

이러한 방법 중 하나를 구현하면 avg 열을 적절하게 처리하면서 각 cname에 대한 최대 평균(wmname)을 올바르게 검색하여 SQL 오류를 제거할 수 있습니다. 특정 데이터 요구 사항과 데이터베이스 기능에 가장 적합한 솔루션을 선택하세요.

위 내용은 내 SQL 쿼리에서 '열은 GROUP BY 절에 나타나거나 집계 함수에 사용되어야 합니다.' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿