집 >데이터 베이스 >MySQL 튜토리얼 >내 SQL 쿼리에서 ORA-00979 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?
ORA-00979 문제 해결: 일반적인 SQL GROUP BY 문제
SQL의 GROUP BY
절을 사용할 때 두려운 ORA-00979 오류가 자주 나타납니다. 이 오류는 선택한 열과 그룹화된 열이 일치하지 않음을 나타냅니다. 특히 SELECT
문에 GROUP BY
절에 없는 열이 포함되거나 그룹화되지 않은 열에 집계되지 않은 함수가 적용되는 경우에 발생합니다.
문제가 있는 쿼리를 살펴보겠습니다.
<code class="language-sql">SELECT cr.review_sk, cr.cs_sk, cr.full_name, tolist(to_char(cf.fact_date, 'mm/dd/yyyy')) "appt", cs.cs_id, cr.tracking_number FROM review cr, cs, fact cf WHERE cr.cs_sk = cs.cs_sk AND UPPER(cs.cs_id) LIKE '%' || UPPER(i_cs_id) || '%' AND row_delete_date_time IS NULL AND cr.review_sk = cf.review_wk(+) AND cr.fact_type_code (+) = 183050 GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number ORDER BY cs.cs_id, cr.full_name;</code>
이 쿼리는 GROUP BY
절이 불완전하기 때문에 ORA-00979를 트리거합니다. 이 문제를 해결하려면 목록의 집계되지 않은 모든SELECT
열을 GROUP BY
절에 포함하거나 집계 함수(예: COUNT
, SUM
, MIN
, , MAX
) 명시적으로 그룹화되지 않은 열에 추가됩니다.AVG
<code class="language-sql">SELECT cr.review_sk, cr.cs_sk, cr.full_name, to_char(cf.fact_date, 'mm/dd/yyyy') "appt", cs.cs_id, cr.tracking_number FROM review cr, cs, fact cf WHERE cr.cs_sk = cs.cs_sk AND UPPER(cs.cs_id) LIKE '%' || UPPER(i_cs_id) || '%' AND row_delete_date_time IS NULL AND cr.review_sk = cf.review_wk(+) AND cr.fact_type_code (+) = 183050 GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number, cr.full_name, cs.cs_id ORDER BY cs.cs_id, cr.full_name;</code>핵심 변경 사항은
절에 cr.full_name
및 cs.cs_id
을 추가하는 것입니다. 또는 GROUP BY
및 cr.full_name
에 대한 집계 결과만 필요한 경우 cs.cs_id
문에 적절한 집계 함수를 사용해야 합니다. SELECT
목록의 모든 열이 집계되거나 SELECT
절에 포함되도록 하면 ORA-00979 오류가 제거됩니다. GROUP BY
함수를 제거하면 집계 함수가 아니기 때문에 문제 해결에도 도움이 됩니다.tolist()
위 내용은 내 SQL 쿼리에서 ORA-00979 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!