首页 > 解决方案 > 如何在 GROUP BY 的结果中添加一个额外的列,其值与条件匹配?

问题描述

我正在尝试使用 GROUP BY 生成表的摘要,但我想添加一个值与原始表中的条件匹配的列。我要检查的条件是 style = 2 以便在结果中显示文件名与该样式匹配的新列。

这是原始表格的样子:

category  |  value | style | filename
   A      |   8    |   0   |   AAA    
   B      |   4    |   2   |   BBB    
   B      |   6    |   1   |   CCC    
   A      |   3    |   2   |   DDD    
   A      |   6    |   1   |   EEE    
   C      |   7    |   2   |   FFF   
   B      |   5    |   1   |   GGG    
   A      |   3    |   1   |   HHH    

这就是我要的:

category  |  total_value   | filename
   A      |        20      |   DDD
   B      |        15      |   BBB
   C      |         7      |   FFF

我尝试了这个查询,但选择的文件名是 MINIMUM,而不是与 style = 2 匹配的文件名:

SELECT category, SUM(value) AS total_value, MIN(filename) AS filename FROM data GROUP BY category;

标签: mysqlsqlgroup-by

解决方案


如果我理解正确,你需要这个:

SELECT category, SUM(value) AS total_value, 
MIN(case when style = 2 then filename end) AS filename 
FROM data GROUP BY category;

推荐阅读