У меня есть таблица с billID
быть первичным ключом:Альтернатива GROUP BY
Invoice (billID, item, value, quantity)
и следующий запрос:
SELECT item, sum(quantity) AS TotalItems
FROM Invoice
WHERE value>1
GROUP BY item
HAVING sum(quantity)>10
мне нужно переписать оптимизируют (или de-optimize?) используя только SELECT
, FROM
и WHERE
.
- Каков новый запрос, устраняющий
GROUP BY
иHAVING
? - Всегда можно устранить
GROUP BY
&HAVING
и использовать толькоSELECT
,FROM
иWHERE
?
Мой подход:
[1] Я использую UNION
различной items
для достижения этой цели. Но главная проблема в том, что мне нужно знать все item
перед рукой.
SELECT item, sum(quantity) FROM Invoice WHERE item='lumia'
UNION
SELECT item, sum(quantity) FROM Invoice WHERE item='iphone'
UNION
SELECT item, sum(quantity) FROM Invoice WHERE item='samsung'
UNION
SELECT item, sum(quantity) FROM Invoice WHERE item='moto'
.
.
.
and so on
Есть ли другой способ получить результат?
Что случилось с вашим исходным запросом? Я думаю, что это наиболее оптимальное решение для вашей проблемы. – sgeddes
@sgeddes Я согласен. Но мне нужно проанализировать запрос без 'GROUP BY' и' HAVING' – Sumit
@sam: почему? Какую конкретную проблему вы пытаетесь решить? У вас проблемы с производительностью? Это интервью мозгового дразнилки? Домашнее задание? Вам просто интересно? Я не могу придумать, почему вы хотите использовать что-либо другое, кроме GROUP BY. Альтернативы, как правило, более медленные и, конечно, менее гибкие. – siride