SQL에서는 집계 작업(예: 최대값 찾기)을 수행할 때 집계에 사용되는 열도 GROUP BY 절에 나타나야 합니다. 그렇지 않으면 "열은 GROUP BY 절에 나타나거나 집계 함수로 사용되어야 합니다."라는 오류가 발생합니다.
테이블에서 각 고객 이름(cname)의 최대 평균 값(avg)을 찾고 싶다고 가정해 보겠습니다.
<code class="language-sql">SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname;</code>
이 쿼리는 GROUP BY 절에 wmname이 포함되어 있지 않기 때문에 오류를 반환합니다. 이 문제를 해결하려면 간단히 cname 및 wmname으로 그룹화하면 됩니다.
<code class="language-sql">SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname, wmname;</code>
그러나 이 방법은 각 고유 cname에 대한 최대 평균 값을 표시하는 예상 결과를 생성하지 않습니다. 대신 cname 및 wmname으로 그룹화되어 cname당 여러 행이 생성됩니다. 이 문제를 해결하려면 다음 방법 중 하나를 따르십시오.
<code class="language-sql">SELECT cname, MAX(avg) AS mx FROM makerar GROUP BY cname;</code>
<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 t.mx = m.avg;</code>
창 기능을 사용하면 지정된 창 내의 행 전체에 걸쳐 계산을 수행할 수 있습니다. 이 경우 PARTITION BY 절을 사용하여 cname별로 그룹화하고 각 파티션의 최대 평균 값을 계산할 수 있습니다.
<code class="language-sql">SELECT cname, wmname, MAX(avg) OVER (PARTITION BY cname) AS mx FROM makerar;</code>
이 방법은 모든 기록을 표시하지만 행당 cname당 최대 평균 값을 올바르게 표시합니다.
최대 평균 값과 일치하는 고유한 튜플만 표시하려면 다음 방법을 사용할 수 있습니다.
<code class="language-sql">SELECT cname, wmname, avg, ROW_NUMBER() OVER (PARTITION BY cname ORDER BY avg DESC) AS rn FROM makerar;</code>
<code class="language-sql">SELECT DISTINCT /* distinct matters here */ m.cname, m.wmname, t.avg AS mx FROM ( SELECT cname, wmname, avg, ROW_NUMBER() OVER (PARTITION BY cname ORDER BY avg DESC) AS rn FROM makerar ) t JOIN makerar m ON m.cname = t.cname AND m.wmname = t.wmname AND t.rn = 1;</code>
이 메소드는 각 cname의 최대 평균 값을 포함하는 고유 튜플 목록을 반환합니다. ORDER BY avg DESC
을 기준으로 내림차순으로 순위가 지정되도록 avg
을 추가하세요.
위 내용은 SQL '열은 GROUP BY 절에 나타나야 합니다' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!