Я на Oracle 11g и довольно озадачен тем, как третий запрос может даже скомпилироваться ниже.Разве это не должно вызвать ошибку ORA-00937?Может ли кто-нибудь еще воспроизвести это или объяснить, как или почему Oracle игнорирует отсутствие предложения GROUP BY во встроенном представлении?(он выдает ошибку только при запуске самого подзапроса)
DROP TABLE ZZZ_DELETE_ME;
CREATE TABLE ZZZ_DELETE_ME
(
contract NUMBER(6),
lives INTEGER
);
INSERT INTO ZZZ_DELETE_ME (contract,lives) VALUES (123456,100);
INSERT INTO ZZZ_DELETE_ME (contract,lives) VALUES (123456,50);
INSERT INTO ZZZ_DELETE_ME (contract,lives) VALUES (123457,100);
INSERT INTO ZZZ_DELETE_ME (contract,lives) VALUES (123457,50);
INSERT INTO ZZZ_DELETE_ME (contract,lives) VALUES (123458,100);
INSERT INTO ZZZ_DELETE_ME (contract,lives) VALUES (123458,50);
INSERT INTO ZZZ_DELETE_ME (contract,lives) VALUES (123459,100);
INSERT INTO ZZZ_DELETE_ME (contract,lives) VALUES (123459,50);
-- query 1 returns 100 for each record (which makes sense)
SELECT contract, SUM(MAX_LIVES) TOTAL_LIVES
FROM
(
SELECT contract, MAX(lives) MAX_LIVES
FROM ZZZ_DELETE_ME
GROUP BY contract
)
GROUP BY contract;
-- query 2 returns 400 (which makes sense)
SELECT SUM(MAX_LIVES) TOTAL_LIVES
FROM
(
SELECT contract, MAX(lives) MAX_LIVES
FROM ZZZ_DELETE_ME
GROUP BY contract
);
-- query 3 returns 100 (but why? Shouldn't this throw an error?)
SELECT SUM(MAX_LIVES) TOTAL_LIVES
FROM
(
SELECT contract, MAX(lives) MAX_LIVES
FROM ZZZ_DELETE_ME
-- THERE'S NO GROUP BY HERE!
);