Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从按不同项分组的结果集中计算最大(列)行_Sql_Database_Sql Server 2008 - Fatal编程技术网

Sql 如何从按不同项分组的结果集中计算最大(列)行

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

我根据order_main和order_detail表计算了客户订购最多的商品

我所做的是,我计算了按客户id和项目id分组的订单数量,为了将结果集减少到按客户排序最多的项目,我通过相同的查询加入了结果集,删除了按项目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 |