>데이터 베이스 >MySQL 튜토리얼 >내 SQL 쿼리에서 ORA-00979 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

내 SQL 쿼리에서 ORA-00979 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-24 04:47:10376검색

Why Does My SQL Query Result in an ORA-00979 Error, and How Can I Fix It?

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_namecs.cs_id을 추가하는 것입니다. 또는 GROUP BYcr.full_name에 대한 집계 결과만 필요한 경우 cs.cs_id 문에 적절한 집계 함수를 사용해야 합니다. SELECT 목록의 모든 열이 집계되거나 SELECT 절에 포함되도록 하면 ORA-00979 오류가 제거됩니다. GROUP BY 함수를 제거하면 집계 함수가 아니기 때문에 문제 해결에도 도움이 됩니다.tolist()

위 내용은 내 SQL 쿼리에서 ORA-00979 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.