聚合函数混淆

时间:2016-05-16 08:09:18

标签: sql-server aggregate

我有一个包含产品列表的表格,架构为:

Product, Warehouse, Supplier, Order Quantity

我想要做的是为每个供应商选择订单数量最多的仓库。

表数据:

Cornflakes, WH1, Kellogs, 10
Cornflakes, WH2, Kellogs, 5
Cornflakes, WH3, Kellogs, 0
Crunchy,    WH1, Cadbury, 20
Crunchy,    WH2, Cadbury, 10
Mars,       WH1, Cadbury. 56
Mars,       WH4, Cadbury, 8

我认为这里有足够的信息可以提供简单的答案,如果没有,请在评论中请求我澄清而不是downvote,我会很快编辑问题。

示例输出:

Kellogs, WH1
Cadbury, WH1

仓库编号将是这一个,因为它为该供应商下的每个产品订购的总数量最多。

2 个答案:

答案 0 :(得分:1)

MS SQL 2008+

SELECT Supplier, Warehouse
FROM (
  SELECT Warehouse, Supplier, rn=ROW_NUMBER() OVER (PARTITION BY Supplier ORDER BY SUM([Order Quantity]) DESC)
  FROM t
  GROUP BY Warehouse, Supplier
) tt
WHERE rn=1

答案 1 :(得分:0)

试试这个:

select a.supplier,a.warehouse,a.max(Order Quantity) from
(select supplier,warehouse,sum(Order Quantity) as quantity from products
group by supplier,warehouse)a
 group by a.supplier,a.warehouse