문제 설명
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 Muazzam、Gordon Linoff)