집 >데이터 베이스 >MySQL 튜토리얼 >ORA-00979를 해결하는 방법: SQL 쿼리의 열 그룹화?
SQL 쿼리에서 ORA-00979 이해 및 해결
SQL 쿼리에서 GROUP BY
절을 잘못 사용하면 'GROUP BY 표현식이 아님'이라는 ORA-00979 오류가 발생합니다. 이는 SELECT
문에 GROUP BY
절에 언급되지 않은 열이 포함되거나 그룹화되지 않은 열에 집계 함수를 사용할 때 발생합니다.
GROUP BY
절은 지정된 열에서 동일한 값을 가진 행을 그룹화하여 집계 함수(예: SUM
, AVG
, MIN
, MAX
, COUNT
)를 사용하여 각 그룹 내의 데이터를 요약할 수 있습니다. 적절한 그룹화가 없으면 데이터베이스가 각 그룹과 연결할 값을 결정할 수 없어 오류가 발생합니다.
예 및 해결 방법:
이 오류를 일으키는 일반적인 시나리오는 여러 열을 선택하지만 하위 집합별로만 그룹화하는 것입니다. 데이터베이스는 각 그룹 내의 그룹화되지 않은 열에 대한 단일 값을 결정할 수 없습니다.
이 문제를 해결하려면 다음 중 하나를 수행하세요.
GROUP BY
절에 집계되지 않은 모든 열을 포함합니다. 선택한 열의 고유한 조합을 모두 보려면 이 방법이 가장 간단한 솔루션입니다.
그룹화되지 않은 열에 집계 함수 사용: 특정 열에 대한 요약 통계만 필요한 경우 해당 열에 집계 함수(예: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!