我试图计算多个单词出现在名为sg_event的列中但当前分别运行每个单词的次数。有谁知道如何将它组合成一个查询。
select count(*) from metrics
WHERE sg_event = 'open';
select count(*) from metrics
WHERE sg_event = 'delivered';
select count(*) from metrics
WHERE sg_event = 'click';
我希望的结果如下,
open_count,delivered_count,click_count
答案 0 :(得分:1)
您可以为此
使用条件和select
sum( case when sg_event = 'open' then 1 else 0 end ) as `open_count`,
sum( case when sg_event = 'delivered' then 1 else 0 end ) as `delivered_count`,
sum( case when sg_event = 'click' then 1 else 0 end ) as `click_count`
from metrics
答案 1 :(得分:1)
如answer by Abhik Chakraborty所示,您可以使用case
表达式有条件地聚合数据,但由于MySQL将布尔表达式计算为1或0,因此可以将查询进一步缩小为这种更紧凑的形式: / p>
select
sum(sg_event = 'open') as `open_count`,
sum(sg_event = 'delivered') as `delivered_count`,
sum(sg_event = 'click') as `click_count`
from metrics
答案 2 :(得分:1)
您可以通过以下方式使用标准sql功能组:
SELECT count(*), sg_event
FROM metrics
WHERE sg_event IN ( 'open', 'delivered', 'click')
GROUP BY sg_event;
你应该得到像
这样的东西10 open
15 delivered
76 click
所以每行得到一笔钱。
当然,您可以对结果进行排序(例如:ORDER BY 1,按计数列排序)
此解决方案更灵活,因为您可以指定更多要检查的值(此处为sg_event),也可以是一个包含所有感兴趣的sg_events的表的连接。