SELECT WHERE子选择SUM适用于条件

时间:2016-12-13 14:41:46

标签: mysql

这是我的样本数据库:

orderID |name |invoiceTotal |packGroup
--------------------------------------
123     |john |5.49         |abc
456     |bill |10.00        |def  
789     |bill |10.00        |def

有些客户有一个订单,有些客户有多个订单,但是有相同的送货地址。应用程序用户将决定Bill的两个订单是否应该在一个包中一起发货。如果是这样,那么" packGroup"设置为相同的唯一字符串。

现在我想列出订单,让用户可以选择即价格范围(以及其他属性,如交货国家,推荐人等)。

因此,我可以轻松地执行以下操作来显示价格范围内的订单。

SELECT * 
  FROM orders 
 WHERE ... 
   AND amountTotal/exchangeRatio > 15 
   AND amountTotal/exchangeRatio < 50 
 GROUP 
    BY packGroup

现在我想只显示一张累计订单,列出总发票金额为20。

SELECT *
  FROM orders 
 WHERE ... 
   AND (SELECT SUM(amountTotal)/exchangeRatio 
          FROM orders o 
         WHERE packGroup=o.packGroup) > 15 
   AND (SELECT SUM(amountTotal)/exchangeRatio 
          FROM orders o 
         WHERE packGroup=o.packGroup) < 50 
 GROUP 
    BY packGroup

但我得到0结果。 我的问题不是显示&#34; 20&#34;但要让比尔的订单适用15至50之间的价格范围。

澄清:&#34; exchangeRatio&#34;当订单以另一种外币存入时,表格中的另一个字段与1不同。

更新 SQLfiddle

1 个答案:

答案 0 :(得分:0)

也许就是这个:

SELECT orders.*, SUM(amountTotal)/exchangeRatio AS sum_total
FROM orders
WHERE 1=1
GROUP BY orders.packGroup
HAVING sum_total>15 AND sum_total<50

或者如果您想要所有与该子句匹配的行:

SELECT orders.*
FROM orders
WHERE 1=1
AND packGroup = (SELECT o.packGroup 
FROM orders AS o
GROUP BY o.packGroup
HAVING (SUM(o.amountTotal/o.exchangeRatio)) BETWEEN 15 AND 50)