>데이터 베이스 >MySQL 튜토리얼 >ORA-00979를 해결하는 방법: SQL 쿼리의 열 그룹화?

ORA-00979를 해결하는 방법: SQL 쿼리의 열 그룹화?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-24 04:52:09728검색

How to Resolve ORA-00979: Grouping Columns in SQL Queries?

SQL 쿼리에서 ORA-00979 이해 및 해결

SQL 쿼리에서 GROUP BY 절을 잘못 사용하면 'GROUP BY 표현식이 아님'이라는 ORA-00979 오류가 발생합니다. 이는 SELECT 문에 GROUP BY 절에 언급되지 않은 열이 포함되거나 그룹화되지 않은 열에 집계 함수를 사용할 때 발생합니다.

GROUP BY 절은 지정된 열에서 동일한 값을 가진 행을 그룹화하여 집계 함수(예: SUM, AVG, MIN, MAX, COUNT)를 사용하여 각 그룹 내의 데이터를 요약할 수 있습니다. 적절한 그룹화가 없으면 데이터베이스가 각 그룹과 연결할 값을 결정할 수 없어 오류가 발생합니다.

예 및 해결 방법:

이 오류를 일으키는 일반적인 시나리오는 여러 열을 선택하지만 하위 집합별로만 그룹화하는 것입니다. 데이터베이스는 각 그룹 내의 그룹화되지 않은 열에 대한 단일 값을 결정할 수 없습니다.

이 문제를 해결하려면 다음 중 하나를 수행하세요.

  1. GROUP BY 절에 집계되지 않은 모든 열을 포함합니다. 선택한 열의 고유한 조합을 모두 보려면 이 방법이 가장 간단한 솔루션입니다.

  2. 그룹화되지 않은 열에 집계 함수 사용: 특정 열에 대한 요약 통계만 필요한 경우 해당 열에 집계 함수(예: MIN, MAX 또는 AVG)를 적용하세요. 이렇게 하면 출력이 그룹당 단일 행으로 줄어듭니다.

수정된 쿼리로 설명해 보겠습니다.

<code class="language-sql">SELECT 
    cr.review_sk, 
    cr.cs_sk, 
    cr.full_name,
    MIN(TO_CHAR(cf.fact_date, 'mm/dd/yyyy')) AS appt, -- Using MIN to aggregate the date
    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, cr.full_name, cs.cs_id, cr.tracking_number -- All non-aggregated columns are now included
ORDER BY 
    cs.cs_id, cr.full_name;</code>

GROUP BY 절에 집계되지 않은 모든 열을 올바르게 포함하면 ORA-00979 오류 없이 쿼리가 실행되어 데이터 무결성을 보장하고 예상한 결과를 제공합니다. 데이터 분석 요구 사항에 가장 적합한 접근 방식(모든 열 포함 또는 집계 함수 사용)을 선택하는 것을 잊지 마세요.

위 내용은 ORA-00979를 해결하는 방법: SQL 쿼리의 열 그룹화?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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