2016-05-24 100 views
0

假设我有一个“订单”表,我必须打印花费超过100美元的客户名单。要做到这一点我使用具有和GROUP BY:用HAVING和GROUP BY获得总金额

SELECT clientID, SUM(amount) AS spent 
FROM orders 
GROUP BY clientID 
HAVING spent >= 100; 

现在,我不知道是否在同一个查询可能获得通过所有这些客户谁花更多的100 $花费的总金额,总客户数/行。

  • 约翰> $ 125
  • DOE> $ 100
  • TOTAL> $ 225(2的客户端)

回答

2

WITH ROLLUP是你的朋友。

SELECT clientID, SUM(amount) AS spent 
FROM orders 
GROUP BY clientID 
WITH ROLLUP 
HAVING spent >= 100; 
1

的ANSI SQL-92标准的方法:

SELECT clientID, SUM(amount) AS spent 
FROM orders 
GROUP BY clientID 
HAVING SUM(amount) >= 100; 

WITH ROLLUP方法将产生具有空clientID的一个行和sum(amount)所有的ClientID

MySQL也将支持:

SELECT clientID, SUM(amount) AS spent 
FROM orders 
GROUP BY clientID 
HAVING spent >= 100; 

要真正回答这个问题问:

SELECT clientID, SUM(spent) as spent 
FROM (
    SELECT clientID, SUM(amount) AS spent 
    FROM orders 
    GROUP BY clientID 
    HAVING spent >= 100 
) 
GROUP BY clientID 
WITH ROLLUP;