【发布时间】:2014-12-30 07:35:17
【问题描述】:
我已经找到了一些答案,但在这里没有任何帮助。我需要一个查询来查找一个月内每个销售渠道(总共 5 个)的前 10 种产品。我用一个可怕的 union all 查询试试运气,但我没有得到我需要的结果。 (我认为我写的查询不是最好的,反正......)
SELECT a.SKU, a.ProductName, b.SalesChannel, sum(a.PurchasedQuantity) as pq
FROM all_all_orders_items a
INNER JOIN all_all_orders b ON b.AmazonOrderID = a.AmazonOrderID
WHERE b.SalesChannel = 1 AND b.PurchaseDate BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
GROUP BY a.SKU, b.SalesChannel
UNION ALL
SELECT a.SKU, a.ProductName, b.SalesChannel, sum(a.PurchasedQuantity) as pq
FROM all_all_orders_items a
INNER JOIN all_all_orders b ON b.AmazonOrderID = a.AmazonOrderID
WHERE b.SalesChannel = 2 AND b.PurchaseDate BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
GROUP BY a.SKU, b.SalesChannel
UNION ALL
SELECT a.SKU, a.ProductName, b.SalesChannel, sum(a.PurchasedQuantity) as pq
FROM all_all_orders_items a
INNER JOIN all_all_orders b ON b.AmazonOrderID = a.AmazonOrderID
WHERE b.SalesChannel = 3 AND b.PurchaseDate BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
GROUP BY a.SKU, b.SalesChannel
UNION ALL
SELECT a.SKU, a.ProductName, b.SalesChannel, sum(a.PurchasedQuantity) as pq
FROM all_all_orders_items a
INNER JOIN all_all_orders b ON b.AmazonOrderID = a.AmazonOrderID
WHERE b.SalesChannel = 4 AND b.PurchaseDate BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
GROUP BY a.SKU, b.SalesChannel
UNION ALL
SELECT a.SKU, a.ProductName, b.SalesChannel, sum(a.PurchasedQuantity) as pq
FROM all_all_orders_items a
INNER JOIN all_all_orders b ON b.AmazonOrderID = a.AmazonOrderID
WHERE b.SalesChannel = 5 AND b.PurchaseDate BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
GROUP BY a.SKU , b.SalesChannel
ORDER BY pq DESC LIMIT 10
在不查询 db 5 次的情况下获得结果的最佳方法是什么?
现在我只得到整体上最好的产品——但不是特定的销售渠道......
【问题讨论】:
标签: mysql sql select group-by greatest-n-per-group