ORA-00979: Oracle에 대한 GROUP BY 표현식이 아니지만 절 차이의 컨텍스트에서 MySQL에 대해서는 유효하지 않습니다. (ORA-00979: not a GROUP BY expression for Oracle but not valid for MySQL in context of clause difference)


문제 설명

ORA‑00979: Oracle에 대한 GROUP BY 표현식이 아니지만 절 차이의 컨텍스트에서 MySQL에 대해서는 유효하지 않습니다. (ORA‑00979: not a GROUP BY expression for Oracle but not valid for MySQL in context of clause difference)

이 쿼리를 Oracle에서 실행했습니다.

select studentid, attndmark
from attendance_master m,
     attendance_detail d
where m.attnid = d.attendid
group by studentid

오류가 발생했습니다.

ORA‑00979: GROUP BY 표현식이 아닙니다.

오류는 괜찮고 select 절의 열 목록 문제를 알고 있습니다. 하지만 비슷한 쿼리가 MySQL에서도 유효합니다.

SELECT aff.akey, username
FROM `affiliates` aff,
     affstats ast
WHERE aff.akey = ast.akey
group by aff.akey

RDBMS Oracle/Mysql과 MSSQL 모두에서 실행할 수 있는 쿼리 트릭이 필요합니다.

비슷한 방법은 무엇인가요?


참조 솔루션

방법 1:

MySQL is wrong, in the sense that it does not conform to the SQL standard (or even common sense in this case). It allows columns in the SELECT that are not arguments to aggregation functions and that are not in the GROUP BY. The documentation is explicit that the values come from "indeterminate" rows.

By the way, you should learn proper explicit JOIN syntax. The query can be written as:

SELECT aff.akey, MAX(username)
FROM affiliates aff JOIN
     affstats ast 
     ON aff.akey=ast.akey
GROUP BY aff.akey;

This will work in both databases.

(by Muhammad MuazzamGordon Linoff)

참조 문서

  1. ORA‑00979: not a GROUP BY expression for Oracle but not valid for MySQL in context of clause difference (CC BY‑SA 2.5/3.0/4.0)

#oracle #MySQL #SQL #RDBMS #Database






관련 질문

Oracle SQL은 요일을 현재 날짜로 정렬합니다. (Oracle sql sort week days by current day)

3개의 변수가 있는 저장 프로시저 작성을 위한 plSQL 구문 (plSQL Syntax For Writing Stored Procedure w/ 3 Variables)

조건에 따라 SQL 쿼리의 UPDATE 문에서 값을 설정하기 위해 동적 열 이름을 설정하는 방법은 무엇입니까? (How to set dynamic column name to set value in UPDATE statement of SQL Query on the basis of condition?)

현재 회계 연도부터 sysdate까지 (Current Financial Year to sysdate)

카운트 최대 시퀀스 행 (Count Max Sequence row)

ORA-01008: 모든 변수가 바인딩되지 않았습니다(매개변수화된 쿼리가 있는 테이블 어댑터에서) (ORA-01008: not all variables bound (in table adapter with parameterized query))

ORA-00979: Oracle에 대한 GROUP BY 표현식이 아니지만 절 차이의 컨텍스트에서 MySQL에 대해서는 유효하지 않습니다. (ORA-00979: not a GROUP BY expression for Oracle but not valid for MySQL in context of clause difference)

#SQL #QUERY #ROWNUM #ORACLE (#SQL #QUERY #ROWNUM #ORACLE)

Oracle을 위한 IS숫자 대안 (ISNumeric Alternatives for Oracle)

다른 열의 열에서 누락된 문자 목록을 찾는 방법 (How to find list of missing characters in a column from another column)

18C 업그레이드의 일부로 OWA_UTIL.who_called_me에서 변경된 사항은 무엇입니까? (What are the changes done in OWA_UTIL.who_called_me as part of 18C upgrade?)

일부 값이 null인 경우 Oracle에서 날짜를 비교하시겠습니까? (Compare date in Oracle when some value is null?)







코멘트