ORA-00979 문제 해결: GROUP BY
및 ORDER BY
절 충돌
SQL의 ORA-00979 오류는 GROUP BY
및 ORDER BY
절이 일치하지 않아 발생합니다. GROUP BY
는 데이터를 집계하고 ORDER BY
는 데이터를 정렬합니다. ORDER BY
에 GROUP BY
에 없는 열이 포함된 경우 오류가 발생합니다.
문제 이해
ORA-00979 오류를 생성하는 다음 예제 쿼리를 고려하십시오.
<code class="language-sql">SELECT cr.review_sk, cr.cs_sk, cr.full_name, LISTAGG(TO_CHAR(cf.fact_date, 'mm/dd/yyyy'), ',') WITHIN GROUP (ORDER BY cf.fact_date) AS "appt", cs.cs_id, cr.tracking_number FROM review cr JOIN cs ON cr.cs_sk = cs.cs_sk JOIN fact cf ON cr.review_sk = cf.review_wk WHERE UPPER(cs.cs_id) LIKE '%' || UPPER(i_cs_id) || '%' AND row_delete_date_time IS NULL AND cr.fact_type_code = 183050 GROUP BY cr.review_sk, cr.cs_sk, cr.tracking_number ORDER BY cs.cs_id, cr.full_name;</code>
ORDER BY cs.cs_id, cr.full_name
에서 발생한 오류입니다. cs.cs_id
과 cr.full_name
는 GROUP BY
절에 없습니다.
솔루션
ORA-00979를 해결하려면 ORDER BY
의 모든 열이 GROUP BY
에 있거나 집계되어야 합니다.
해결책 1: GROUP BY
그룹화에 열이 꼭 필요한 경우 GROUP BY
절에 포함하세요.
<code class="language-sql">GROUP BY cr.review_sk, cr.cs_sk, cr.tracking_number, cs.cs_id, cr.full_name ORDER BY cs.cs_id, cr.full_name;</code>
해결책 2: 집계 함수 사용
그룹화에 열이 중요하지 않은 경우 MIN
, MAX
등 데이터에 적합한 집계 함수를 사용하세요.
<code class="language-sql">GROUP BY cr.review_sk, cr.cs_sk, cr.tracking_number ORDER BY MIN(cs.cs_id), MIN(cr.full_name);</code>
올바른 솔루션 선택은 쿼리 논리와 원하는 결과에 따라 달라집니다. GROUP BY
에 추가하면 더 자세한 내용이 유지되고, 집계 함수를 사용하면 그룹 내의 데이터가 요약됩니다. 각 접근 방식을 구현하기 전에 그 의미를 주의 깊게 고려하십시오. 데이터와 원하는 결과를 기반으로 적절한 집계 함수를 사용하는 것을 잊지 마세요.
위 내용은 SQL에서 GROUP BY 및 ORDER BY 절 충돌로 인해 발생하는 ORA-00979 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!