집 >데이터 베이스 >MySQL 튜토리얼 >내 SQL 쿼리에서 '열은 GROUP BY 절에 나타나거나 집계 함수에 사용되어야 합니다.' 오류가 발생하는 이유는 무엇입니까?
"GROUP BY 절에 나타나거나 집계 함수에 사용되어야 합니다" SQL 오류 해결
쿼리가 데이터를 그룹화하지만(GROUP BY
사용) 그룹화에 포함되지 않은 열을 선택할 때 "열 "makerar.wmname"은 GROUP BY 절에 나타나거나 집계 함수에 사용되어야 합니다."라는 SQL 오류가 발생합니다. SQL에서는 GROUP BY
절에 없는 선택된 열을 집계(예: MAX
, MIN
, AVG
, SUM
, COUNT
사용)하거나 생략해야 합니다.
해결책:
이 문제를 해결하기 위한 몇 가지 접근 방식은 다음과 같습니다.
wmname
절에 GROUP BY
포함:
각 고유 wmname
과 관련된 모든 cname
값이 필요한 경우 가장 간단한 솔루션입니다.
<code class="language-sql">SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname, wmname;</code>
최대값 및 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
.
창 기능(지원되는 경우):
귀하의 데이터베이스 시스템이 창 기능을 지원하는 경우(대부분의 최신 시스템이 지원함) 이는 간결하고 효율적인 솔루션을 제공합니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!