집계 함수 없이 GROUP BY를 사용할 경우 Oracle이 다음 문제를 피하기 위해 작동하는 방식을 이해하는 것이 중요합니다. "GROUP BY 표현식이 아닙니다" 오류.
GROUP BY는 지정된 열에 대해 동일한 값을 가진 행을 그룹화하고 단일 결과 행을 생성합니다. 그러나 집계 함수에 표시되지 않는 열은 그룹화 값의 고유한 조합을 식별하기 위해 GROUP BY 절에 포함되어야 합니다.
다음 표를 고려하세요.
EMP +-------+------+------+ | EmpNo | EName | Sal | +-------+------+------+ | 7839 | King | 5000 | | 7698 | Blake | 2850 | | 7782 | Clark | 2450 | +-------+------+------+
예시 1:
SELECT EName, Sal FROM EMP GROUP BY EName, Sal
결과:
+------+------+ | EName | Sal | +------+------+ | King | 5000 | | Blake | 2850 | | Clark | 2450 | +------+------+
이 쿼리는 행을 올바르게 그룹화하고 그룹화 열(EName 및 Sal) 이후의 모든 행을 반환합니다. ) 일치합니다.
예 2:
SELECT EName, Sal FROM EMP GROUP BY EName
결과:
ORA-00979: not a GROUP BY expression
Sal이 GROUP BY 절에 포함되지 않았기 때문에 이 쿼리는 실패합니다. Oracle은 동일한 EName에 대해 서로 다른 Sal 값을 사용하여 여러 행을 집계하는 방법을 모릅니다.
예 3:
SELECT EName, Sal FROM EMP GROUP BY Sal
결과:
ORA-00979: not a GROUP BY expression
EName이 GROUP에 포함되어 있지 않기 때문에 이 쿼리도 실패합니다. BY 절. Oracle은 각 고유 Sal 값과 연결할 EName을 알아야 합니다.
예 4:
SELECT EmpNo, EName, Sal FROM EMP GROUP BY Sal, EName
결과:
ORA-00979: not a GROUP BY expression
선택 열(EmpNo, EName, Sal)의 수가 다음 수를 초과하여 이 쿼리가 실패합니다. GROUP BY 절의 열(Sal, EName). Oracle에서는 고유한 조합을 고려하여 선택한 열이 그룹화의 일부가 되도록 요구합니다.
예 5:
SELECT EmpNo, EName, Sal FROM EMP GROUP BY EmpNo, EName, Sal
결과:
+-------+------+------+ | EmpNo | EName | Sal | +-------+------+------+ | 7839 | King | 5000 | | 7698 | Blake | 2850 | | 7782 | Clark | 2450 | +-------+------+------+
선택한 모든 열이 GROUP BY에 포함되어 있으므로 이 쿼리는 성공합니다. 조항. Oracle은 EmpNo, EName 및 Sal의 각각의 고유한 조합을 고려하여 세 개의 개별 행을 생성합니다.
위 내용은 내 Oracle GROUP BY 쿼리가 'GROUP BY 표현식이 아님' 오류를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!