[SQL] 표현에 의해 ORA-00979 그룹에없는
SQL표현에 의해 ORA-00979 그룹에없는
나는 다음과 같은 쿼리 ORA-00979를 얻고있다 :
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;
저도 같은 쿼리에서 GROUP BY 절 BY와 ORDER를 모두 가지고 예제를 찾을 수 없습니다. 나는 한 번에 한하여 그룹에서 각 필드를 제거했지만 여전히 같은 오류를 얻고있다.
해결법
-
==============================
1.당신은 GROUP BY에서 SELECT의 모든 열을 넣어 또는 (MIN, MAX 또는 SUM과 같은) 하나의 값으로 결과를 압축 그들에 기능을 사용해야합니다.
당신은 GROUP BY에서 SELECT의 모든 열을 넣어 또는 (MIN, MAX 또는 SUM과 같은) 하나의 값으로 결과를 압축 그들에 기능을 사용해야합니다.
이 같은 데이터베이스가 상상 : 간단한 예는 이런 이유를 이해합니다 :
FOO BAR 0 A 0 B
당신은 foo에 의해 테이블 그룹에서 SELECT *를 실행합니다. 이 수단은 데이터베이스가 GROUP BY를 수행하기 위해 첫 번째 열 0 결과로 하나의 행을 반환해야하지만 선택했다 막대의 두 값은 이제이 있습니다. 어떤 결과는 기대 - A 또는 B? 또는 데이터베이스가 GROUP BY의 계약을 위반 한 행보다 반환해야?
-
==============================
2.모든없는 그룹 함수 인수있는 표현을 SELECT GROUP BY 절에 포함합니다.
모든없는 그룹 함수 인수있는 표현을 SELECT GROUP BY 절에 포함합니다.
-
==============================
3.너무 나쁜 오라클은 이와 같은 제한 사항이 있습니다. 물론 아닌 GROUP BY에있는 컬럼에 대한 결과는 무작위 것이다, 그러나 때때로 당신은 원한다. 바보 오라클, 당신은 MySQL을 / MSSQL에서이 작업을 수행 할 수 있습니다.
너무 나쁜 오라클은 이와 같은 제한 사항이 있습니다. 물론 아닌 GROUP BY에있는 컬럼에 대한 결과는 무작위 것이다, 그러나 때때로 당신은 원한다. 바보 오라클, 당신은 MySQL을 / MSSQL에서이 작업을 수행 할 수 있습니다.
하지만 오라클의 작업 주위에있다 :
다음 줄은 작업을하지 않는 동안
SELECT unique_id_col, COUNT(1) AS cnt FROM yourTable GROUP BY col_A;
당신은 (그렇지 않으면 CONCAT 사용, 이러한 숫자 가정) 그것에 의해 범위에 열을 유지하기 위해, 다음과 같은 몇 가지 공의와 오라클을 속일 수 있지만 그룹 수
SELECT MAX(unique_id_col) AS unique_id_col, COUNT(1) AS cnt FROM yourTable GROUP BY col_A, (unique_id_col*0 + col_A);
-
==============================
4.당신은 다음을 수행해야합니다 :
당신은 다음을 수행해야합니다 :
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, cs.cs_id, cr.full_name ORDER BY cs.cs_id, cr.full_name;
-
==============================
5.당신은 그룹 기능 (또는 집계 함수 또는 집계 열) 등 COUNT, AVG, MIN, MAX, SUM 등 등등없는 GROUP BY 절, SELECT의 모든 표현을 포함 덕분에 모색 않는 경우 (목록 집계 기능) GROUP BY 절에 존재해야한다.
당신은 그룹 기능 (또는 집계 함수 또는 집계 열) 등 COUNT, AVG, MIN, MAX, SUM 등 등등없는 GROUP BY 절, SELECT의 모든 표현을 포함 덕분에 모색 않는 경우 (목록 집계 기능) GROUP BY 절에 존재해야한다.
이 표시 할 필요가 없다 그래서 GROUP BY 나타나야하므로 예 (정확한 방법) (여기 employee_id입니다, 기 함수 (비 응집 열)하지 않다. 반대로, 합계 (급여)은 기 함수 (집계 열)이며 GROUP (그룹) BYclause한다.
SELECT employee_id, sum(salary) FROM employees GROUP BY employee_id;
예 (잘못된 방법) (여기 employee_id입니다 그룹 함수가 아닙니다 그리고 그것은 ORA-00979 오류로 이어질 것입니다 GROUP BY 절에 표시되지 않습니다.
SELECT employee_id, sum(salary) FROM employees;
당신은 다음 중 하나를 수행해야 해결하려면 :
-
==============================
6.상부 또는 하부가 발현에 의해 선택 표현과 그룹에있는 두 장소에서 사용하지 않는 키워드에 때 같은 오류가 온다.
상부 또는 하부가 발현에 의해 선택 표현과 그룹에있는 두 장소에서 사용하지 않는 키워드에 때 같은 오류가 온다.
잘못된 :-
select a , count(*) from my_table group by UPPER(a) .
권리 :-
select UPPER(a) , count(*) from my_table group by UPPER(a) .
-
==============================
7.에 의해 그룹은 집계 함수에 따라 일부 데이터를 집계하는 데 사용, 당신은 열 또는 그룹화를 필요로되는 열을 넣을 필요가 아닌 다른있다.
에 의해 그룹은 집계 함수에 따라 일부 데이터를 집계하는 데 사용, 당신은 열 또는 그룹화를 필요로되는 열을 넣을 필요가 아닌 다른있다.
예를 들어 :
select d.deptno, max(e.sal) from emp e, dept d where e.deptno = d.deptno group by d.deptno;
이 부서의 최대 급여가 발생합니다.
우리가 절에 의해 그룹에서 D.DEPTNO를 생략하면 지금은 같은 오류를 줄 것이다.
-
==============================
8.ORDER BY 절에서 불일치가 있다면 다른 답변뿐만 아니라,이 오류가 발생할 수 있습니다. 예를 들어 :
ORDER BY 절에서 불일치가 있다면 다른 답변뿐만 아니라,이 오류가 발생할 수 있습니다. 예를 들어 :
select substr(year_month, 1, 4) ,count(*) as tot from schema.tbl group by substr(year_month, 1, 4) order by year_month
from https://stackoverflow.com/questions/1520608/ora-00979-not-a-group-by-expression by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 여러 테이블에서 SQL 쿼리 데이터를 반환 (0) | 2020.03.05 |
---|---|
[SQL] MySQL의에서 순위 기능 (0) | 2020.03.05 |
[SQL] MySQL은 - 열을 행 (0) | 2020.03.05 |
[SQL] 내부와 업데이트 문은 오라클에 합류 (0) | 2020.03.05 |
[SQL] T-SQL 분할 문자열 (0) | 2020.03.05 |