MySQL:使用聚合函数选择distinct

时间:2014-06-22 09:26:44

标签: mysql select distinct

我在从orderItems表中选择不同的订单ID时遇到了一些麻烦。

我的orderItems表包含: orderId | itemId | orderedQuantity | inStockQuantity | backorderQuantity | isBackorderOfId | id

orderedQuantity是订购总金额,inStockQuantity是购买时的可用数量,其余为backorderQuantity。当订单商品是另一个订单商品的延期交货时,isBackorderOfIdid列相关联。

我的查询是尝试选择orderId< backorderQuantity<一个SUM(inStockQuantity) isBackorderOfId = id。如果不同的订单ID有剩余的延期交货,这将产生一个列表。

测试数据:

orderId | itemId | orderedQuantity | inStockQuantity | backorderQuantity | isBackorderOfId | id 1 | 114 | 10 | 6 | 4 | 0 | 23 1 | 255 | 4 | 3 | 1 | 0 | 24 2 | 114 | 3 | 3 | 0 | 23 | 25

查询:

SELECT items1.* FROM orderItems items1
LEFT JOIN orderItems items2 ON items2.isBackorderOfId = items1.id
WHERE items1.backorderQuantity > '0'
GROUP BY items2.isBackorderOfId
HAVING SUM(items2.inStockQuantity) < items1.backorderQuantity 
OR SUM(items2.inStockQuantity) IS NULL`

这导致第一行和第二行具有相同的orderId。由于使用了聚合函数,我无法使用SELECT DISTINCT。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

SELECT  items1.orderId
FROM    orderItems items1
LEFT JOIN
        orderItems items2
ON      items2.isBackorderOfId = items1.id
GROUP BY
        items1.orderId
HAVING  COALESCE(SUM(items2.inStockQuantity), 0) < SUM(items1.backorderQuantity)