计算

时间:2015-08-16 18:58:10

标签: mysql sql

我试图计算多个单词出现在名为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

3 个答案:

答案 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的表的连接。