这是我的样本数据库:
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
答案 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)