GROUP BY的替代方案

Sum*_*mit 1 mysql sql database group-by

我把表billID作为主键:

Invoice (billID, item, value, quantity)

以及以下查询:

SELECT item, sum(quantity) AS TotalItems
FROM Invoice
WHERE value>1
GROUP BY item
HAVING sum(quantity)>10
Run Code Online (Sandbox Code Playgroud)

我需要重写,以优化(或去优化?)只使用SELECT,FROMWHERE.

  1. 什么是新查询消除GROUP BYHAVING
  2. 是否总是可以消除GROUP BYHAVING和只使用SELECT,FROMWHERE

我的方法:

[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
Run Code Online (Sandbox Code Playgroud)

有没有其他方法来获得结果?

rad*_*dar 6

我们可以使用子查询并对每个项目的数量求和

SELECT A.item, A.Total
FROM
(  SELECT distinct item,
       (SELECT SUM(quantity)
        FROM Invoice I2 
        WHERE I2.item = I1.item) Total
FROM Invoice I1
) A
where Total >10
Run Code Online (Sandbox Code Playgroud)