Mysql 分组前N行,但也需要对列值求和
我正在使用以下查询对数据集中前N行进行分组:Mysql 分组前N行,但也需要对列值求和,mysql,sql,Mysql,Sql,我正在使用以下查询对数据集中前N行进行分组: SELECT mgap_ska_id,mgap_ska_id_name, account_manager_id, mgap_growth AS growth,mgap_recovery, (mgap_growth+mgap_recovery) total FROM (SELECT mgap_ska_id,mgap_ska_id_name, account_manager_id, mgap_growth, mgap_recovery,(m
SELECT mgap_ska_id,mgap_ska_id_name, account_manager_id,
mgap_growth AS growth,mgap_recovery,
(mgap_growth+mgap_recovery) total
FROM
(SELECT mgap_ska_id,mgap_ska_id_name, account_manager_id, mgap_growth,
mgap_recovery,(mgap_growth+mgap_recovery) total,
@acid_rank := IF(@current_acid = account_manager_id, @acid_rank + 1, 1)
AS acid_rank,
@current_acid := account_manager_id
FROM mgap_orders
ORDER BY account_manager_id, mgap_growth DESC
) ranked
WHERE acid_rank <= 5
结果非常接近我需要的,但我有一个总的问题需要帮助。我已经缓存了一个查询结果的屏幕截图,为了隐私,我不得不屏蔽客户姓名和ID;mgap_ska_id和account_manager_id是INT列,mgap_ska_id_名称是VARCHAR
理论上我需要求和,我知道这是一个集合;这就是在保持排名得体的同时,多重mgap_增长值的问题
如果我分组,那么我将失去前5名。目前,mgap_增长值仅为mgap_增长列中每个mgap_ska_id的一个值;我需要它是每个mgap_ska_id的所有mgap_增长值的总和,并保持前五名,如图所示
谢谢 您可以在选择字段中添加以下行:
(SELECT SUM(t.mgap_growth) FROM mgap_orders t WHERE t.mgap_ska_id = ranked.mgap_ska_id ) AS total_mgap_growth
因此,您的代码将是:
SELECT mgap_ska_id,mgap_ska_id_name, account_manager_id,
mgap_growth AS growth,mgap_recovery,
(mgap_growth+mgap_recovery) total,
(SELECT SUM(t.mgap_growth) FROM mgap_orders t WHERE t.mgap_ska_id = ranked.mgap_ska_id ) AS total_mgap_growth
FROM
(SELECT mgap_ska_id,mgap_ska_id_name, account_manager_id, mgap_growth,
mgap_recovery,(mgap_growth+mgap_recovery) total,
@acid_rank := IF(@current_acid = account_manager_id, @acid_rank + 1, 1)
AS acid_rank,
@current_acid := account_manager_id
FROM mgap_orders
ORDER BY account_manager_id, mgap_growth DESC
) ranked
WHERE acid_rank <= 5
如果帐户管理器id是自动生成的,它实际上不会告诉我们任何与隐私相关的信息。你希望结果是什么样的?这也将有助于样本起始数据的正确匿名化。