복붙노트

[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. ==============================

    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. ==============================

    2.모든없는 그룹 함수 인수있는 표현을 SELECT GROUP BY 절에 포함합니다.

    모든없는 그룹 함수 인수있는 표현을 SELECT GROUP BY 절에 포함합니다.

  3. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    6.상부 또는 하부가 발현에 의해 선택 표현과 그룹에있는 두 장소에서 사용하지 않는 키워드에 때 같은 오류가 온다.

    상부 또는 하부가 발현에 의해 선택 표현과 그룹에있는 두 장소에서 사용하지 않는 키워드에 때 같은 오류가 온다.

    잘못된 :-

    select a , count(*) from my_table group by UPPER(a) .
    

    권리 :-

    select UPPER(a) , count(*) from my_table group by UPPER(a) .
    
  7. ==============================

    7.에 의해 그룹은 집계 함수에 따라 일부 데이터를 집계하는 데 사용, 당신은 열 또는 그룹화를 필요로되는 열을 넣을 필요가 아닌 다른있다.

    에 의해 그룹은 집계 함수에 따라 일부 데이터를 집계하는 데 사용, 당신은 열 또는 그룹화를 필요로되는 열을 넣을 필요가 아닌 다른있다.

    예를 들어 :

    select d.deptno, max(e.sal) 
    from emp e, dept d
    where e.deptno = d.deptno
    group by d.deptno;
    

    이 부서의 최대 급여가 발생합니다.

    우리가 절에 의해 그룹에서 D.DEPTNO를 생략하면 지금은 같은 오류를 줄 것이다.

  8. ==============================

    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
    
  9. from https://stackoverflow.com/questions/1520608/ora-00979-not-a-group-by-expression by cc-by-sa and MIT license