我正在尝试使用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;
答案 0 :(得分:2)
如果我正确理解,则需要此:
SELECT category, SUM(value) AS total_value,
MIN(case when style = 2 then filename end) AS filename
FROM data GROUP BY category;
答案 1 :(得分:-1)
尽管我更喜欢@Oto Shavadze的答案,但我仍然喜欢分享我想到的解决方案:
select data.category, SUM(data.value), hlp.filename
from data
left join (
select category, filename
from data
where style = 2
group by category
limit 1
) as hlp
on data.category = hlp.category
group by data.category
此解决方案使用子查询,该子查询将为每个filename
选择相应的category
。
编辑:
我使用的网站似乎没有严格的限制,因为在使用colum时,蜂鸣器不在组中列出或在汇总函数中使用。
所以这里是更新版本,使用filname上的MIN()函数,如我在评论中所述:
select data.category, SUM(data.value), MIN(hlp.filename)
from data
left join (
select category, MIN(filename) as filename
from data
where style = 2
group by category
) as hlp
on data.category = hlp.category
group by data.category;