Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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
Mysql 分组前N行,但也需要对列值求和_Mysql_Sql - Fatal编程技术网

Mysql 分组前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

我正在使用以下查询对数据集中前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,(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是自动生成的,它实际上不会告诉我们任何与隐私相关的信息。你希望结果是什么样的?这也将有助于样本起始数据的正确匿名化。