식에 의한 그룹이 아닌 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 절과 ORDER BY 절이 모두 있는 예를 찾을 수 없었습니다.그룹에서 각 필드를 하나씩 삭제하려고 했지만 여전히 동일한 오류가 발생합니다.
하다의 모든 은 다 돼요.SELECT
GROUP BY
예:MIN
,MAX
★★★★★★★★★★★★★★★★★」SUM
를 참조해 주세요.
이 문제가 발생하는 이유를 이해하기 위한 간단한 예를 다음에 제시하겠습니다.다음과 같은 데이터베이스가 있다고 가정합니다.
FOO BAR
0 A
0 B
뛰어가다SELECT * FROM table GROUP BY foo
, 는 첫 열인 ""를 사용하여 0
를 다하다GROUP BY
은 두 .bar
선택할 수 있습니다.것 같습니까?A
★★★★★★★★★★★★★★★★★」B
가 둘, 이는 계약 GROUP BY
포함시키다에 포함하다GROUP BY
all 든 SELECT
을 사용법
Oracle에는 다음과 같은 제한이 있습니다.물론 GROUP BY에 포함되지 않은 열에 대한 결과는 랜덤이지만 때로는 이 결과를 원할 수도 있습니다.바보 같은 Oracle, MySQL/MSSQL에서 이 작업을 수행할 수 있습니다.
그러나 Oracle에 대한 해결 방법이 있습니다.
다음 행은 기능하지 않지만
SELECT unique_id_col, COUNT(1) AS cnt FROM yourTable GROUP BY col_A;
다음과 같은 몇 개의 0을 사용하여 Oracle을 속일 수 있습니다. 열을 범위 내에 두고 그룹화하지 않습니다(이것이 숫자라고 가정하고, 그렇지 않으면 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);
GROUP BY
" "의 임의의 SELECT
또는 COUNT
,AVG
,MIN
,MAX
,SUM
(집약함수 목록) 등이 다음 위치에 존재해야 합니다.GROUP BY
절을 클릭합니다.
예(올바른 방법) (여기서)employee_id
그룹 함수(비기호 컬럼)가 아니므로 에 표시되어야 합니다.GROUP BY
sum(에 sum(salary)은 abgregated column(집계열)에 표시할 필요가 없습니다.GROUP BY
SELECT employee_id, sum(salary)
FROM employees
GROUP BY employee_id;
예(잘못된 방법)(여기서)employee_id
, 기능에는 .GROUP BY
ORA-00979 - or or or or or or or or or or or or or or or or 。
SELECT employee_id, sum(salary)
FROM employees;
수정하려면 다음 중 하나를 수행해야 합니다.
- 되어 있는 표현을 포함합니다.
SELECT
의 절GROUP BY
삭제 - 을 지우다에서 합니다.
SELECT
절을 클릭합니다.
다음 작업을 수행해야 합니다.
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;
select expression과 group by expression의 양쪽에서 UPER 또는 LOWER 키워드가 사용되지 않은 경우에도 동일한 오류가 발생합니다.
틀렸다:-
select a , count(*) from my_table group by UPPER(a) .
오른쪽:-
select UPPER(a) , count(*) from my_table group by UPPER(a) .
이 오류는 다른 응답과 더불어 절별 주문에 불일치가 있는 경우 발생할 수 있습니다.예:
select
substr(year_month, 1, 4)
,count(*) as tot
from
schema.tbl
group by
substr(year_month, 1, 4)
order by
year_month
각 그룹의 랜덤 행에 관한 @Joseph Lust의 답변에 대한 대체 솔루션을 추가합니다.이는 Oracle Database 19c 이상에서 다음을 사용하여 가능합니다.any_value
키워드를 지정합니다.다음은 예를 제시하겠습니다.
select customer_id,
max ( order_datetime ),
any_value ( store_id ),
any_value ( order_status ),
any_value ( order_id )
from co.orders
group by customer_id;
그룹화 기준 은 집계 함수에 따라 일부 데이터를 집계하는 데 사용되며, 그룹화가 필요한 열을 하나 이상 포함해야 합니다.
예를 들어 다음과 같습니다.
select d.deptno, max(e.sal)
from emp e, dept d
where e.deptno = d.deptno
group by d.deptno;
이로 인해 부서별 최대 급여가 발생합니다.
여기서 생략하면d.deptno
그룹별로 같은 에러가 발생합니다.
"Aaron Digulla" (이 시점에서는 첫 번째)의 답변은 Spring Boot 2 (JPA/Hibernate)와 CriteriaQuery/CriteriaBuilder를 사용한 동일한 에러 코드에 대한 솔루션에 영감을 주었습니다.
선택 목록을 작성하여 criteriaQuery.multiselect()에 추가합니다.
List<Selection> selects = new ArrayList<>();
selects.add(seccionRoot.get("id"));
selects.add(synSeccionRoot.get("DDF"));
selects.add(synSeccionRoot.get("TTYU"));
selects.add(synSeccionRoot.get("4567"));
selects.add(seccionRoot.get("22").get("223"));
selects.add(tasaRoot.get("price"));
selects.add(tasaRoot.get("chair"));
cq.multiselect(selects.toArray(Selection[]::new));
그런 다음 목록을 식[]에 캐스팅할 수 있습니다.
cq.groupBy(selects.toArray(Expression[]::new));
언급URL : https://stackoverflow.com/questions/1520608/ora-00979-not-a-group-by-expression
'programing' 카테고리의 다른 글
JContainer, JObject, JToken 및 Linq 혼재 (0) | 2023.02.15 |
---|---|
history.replaceState() 예? (0) | 2023.02.15 |
pymongo를 사용하여 mongodb에서 ObjectId로 검색 (0) | 2023.02.15 |
kotlin에서는 콩 검증이 동작하지 않습니다(JSR 380). (0) | 2023.02.11 |
에러: 모듈 'node-sass'를 찾을 수 없습니다. (0) | 2023.02.11 |