Sql 如何从按不同项分组的结果集中计算最大(列)行
我根据order_main和order_detail表计算了客户订购最多的商品 我所做的是,我计算了按客户id和项目id分组的订单数量,为了将结果集减少到按客户排序最多的项目,我通过相同的查询加入了结果集,删除了按项目id分组 我觉得这不是一个好问题 还有更好的选择吗Sql 如何从按不同项分组的结果集中计算最大(列)行,sql,database,sql-server-2008,Sql,Database,Sql Server 2008,我根据order_main和order_detail表计算了客户订购最多的商品 我所做的是,我计算了按客户id和项目id分组的订单数量,为了将结果集减少到按客户排序最多的项目,我通过相同的查询加入了结果集,删除了按项目id分组 我觉得这不是一个好问题 还有更好的选择吗 客户订购最多的商品 查询: SELECT T1.* FROM ( SELECT MAX(no_of_orders) [no_of_orders], ord.customer_id
客户订购最多的商品 查询:
SELECT T1.* FROM
(
SELECT
MAX(no_of_orders) [no_of_orders],
ord.customer_id [customer_id],
ord_dtl.item_id [item_id]
FROM order_main ord
INNER JOIN order_detail ord_dtl
ON ord.order_id = ord_dtl.order_id
GROUP BY
ord.customer_id, ord_dtl.item_id
) T1
INNER JOIN
(
SELECT
MAX(no_of_orders) [no_of_orders],
ord.customer_id
FROM order_main ord
INNER JOIN order_detail ord_dtl
ON ord.order_id = ord_dtl.order_id
GROUP BY
ord.customer_id
) T2
ON
T1.customer_id = T2.customer_id
AND T1.no_of_orders = T2.no_of_orders
结果:
SELECT a.no_of_orders,
a.customer_id,
a.item_id
FROM (SELECT
MAX(no_of_orders) [no_of_orders],
ord.customer_id [customer_id],
ord_dtl.item_id [item_id],
ROW_NUMBER() OVER(PARTITION BY ord.customer_id ORDER BY MAX(no_of_orders) DESC) AS rnk
FROM order_main ord
INNER JOIN order_detail ord_dtl
ON ord.order_id = ord_dtl.order_id
GROUP BY
ord.customer_id, ord_dtl.item_id) a
WHERE a.rnk = 1
无法理解您试图实现的目标
| NO_OF_ORDERS | CUSTOMER_ID | ITEM_ID |
---------------|-------------|---------|
| 20 | 2 | 6 |
| 50 | 7 | 6 |
| 1500 | 8 | 7 |
| 10 | 9 | 3 |