У меня есть запрос, как следующийКак объединить без использования `GROUP BY`?
SELECT a.*, b.*
(SELECT ATTR1, ATTR2, sum(QUANTITY) AS TOTAL_QTY,
ATTR3 FROM TABLE_A
WHERE ATTR4 > 0
GROUP BY ATTR1, ATTR2, ATTR3) a,
TABLE_B b
WHERE a.ATTR1 = b.ATTR1
AND a.ATTR2 = b.ATTR2
мне нужно GROUP BY
только ATTR1
вычислить правильный TOTAL_QTY
, но единственная причина, я группируя другие атрибуты, потому что Oracle требует, что если GROUP BY
пункт присутствует, то все SELECT
атрибуты должны в статье GROUP BY
.
Это означает, что каждый раз, когда мне нужен атрибут в этом запросе из таблицы_А, мне также нужно поставить его в GROUP BY
. Это не только выглядит уродливым, но может иметь влияние на производительность и, возможно, непредвиденный побочный эффект.
Как переписать вышеуказанный запрос для расчета TOTAL_QTY
в каждой группе ATTR1
без предложения GROUP BY
?
Это характер агрегатов, которые вы должны группировать, иначе система не знает, что вы хотите суммировать или как сформировать строки. Единственный способ устранить этот эффект - использовать агрегат в других столбцах max (attr1), max (attr2), однако вы быстро увидите, почему group by является лучшим вариантом, если attr1 и attr2 имеют разные значения в разных строках для тот же столбец – xQbert
«Oracle требует, чтобы, если предложение GROUP BY присутствует, все атрибуты SELECT также должны быть в предложении GROUP BY». Неправда - они также могут быть агрегированы; если другие значения всегда будут постоянными для заданного значения желаемого элемента группировки, вы можете использовать такую функцию, как MAX. –
То, что вы ищете, не определено. Скажем, у вас есть две строки с одинаковым значением для 'attr1' и разные значения для' attr2'. Что вы хотите, чтобы в результате получился результат? –