SQL子查询-子组汇总后的Max()SUM()

问题描述 投票:1回答:1

我想在此先感谢您的关注。感激。我正在编写一个子查询,在汇总构成收入组的详细项目之后,我需要为每个客户获得最高收入组。因此,此查询需要为每个客户获得一条记录(将需要处理关系以防止在我的主查询中重复)。以下是子查询(带有子查询,我需要将其加入我在ACCOUNT_ID上的查询(未显示)。总和的子查询有效,但随后我需要按ACCOUNT_ID和REV_CODE获取每个帐户的总金额最高的记录。

预览似乎无法正确排列,但可以看到。

ACCOUNT_ID   REVENUE_CODE  CHARGE_ITEM   AMOUNT
1234         0210          9011           938.49
1234         0210          8294           546.00
1234         0850          3953           32.50
1234         0850          1023           12.56
1234         0360          1203           1292.98

我需要结果,但需要每个ACCOUNT_ID(而不是子查询中所有结果的TOP 1)。真的只需要ACCOUNT_ID和REVENUE_CODE1234 0210 1484.49

    SELECT
    RC_SUBQ.ACCOUNT_ID
    ,RC_SUBQ.REVENUE_CODE
    ,MAX(RC_SUBQ.RC_SUM)
    FROM 
            (SELECT /* SORTED DESC ON AMOUNT. I NEED THE TOP RECORD FOR EACH ACCOUNT_ID */
                HTR.ACCOUNT_ID
                ,HTR.REVENUE_CODE
                ,SUM(AMOUNT) AS 'RC_SUM' 
            FROM TRANSACTIONS HTR
            GROUP BY HTR.HSP_ACCOUNT_ID,
                HTR.REVENUE_CODE
            ORDER BY HTR.ACCOUNT_ID,SUM(AMOUNT) DESC
            ) RC_SUBQ

            GROUP BY
            RC_SUBQ.HSP_ACCOUNT_ID
            ,RC_SUBQ.REVENUE_CODE
sql-server group-by sum
1个回答
0
投票

您可以使用ROW_NUMBER()和窗口函数PARTITION BY来枚举多个和。

ROW_NUMBER() OVER (PARTITION BY HTR.ACCOUNT_ID, HTR.REVENUE_CODE ORDER BY RC_SUM DESC)

所以,遵循这些原则:

(SELECT /* SORTED DESC ON AMOUNT. I NEED THE TOP RECORD FOR EACH ACCOUNT_ID */
    ROW_NUMBER() OVER (PARTITION BY HTR.ACCOUNT_ID, HTR.REVENUE_CODE ORDER BY RC_SUM DESC)
    HTR.ACCOUNT_ID
    ,HTR.REVENUE_CODE
    ,SUM(AMOUNT) AS 'RC_SUM' 
FROM TRANSACTIONS HTR
GROUP BY HTR.HSP_ACCOUNT_ID,
    HTR.REVENUE_CODE
ORDER BY HTR.ACCOUNT_ID,SUM(AMOUNT) DESC
) RC_SUBQ
© www.soinside.com 2019 - 2024. All rights reserved.