我有一个包含以下行的mysql表(我使用的是关系数据库,所以这只是一个示例):
id, start_date, person, how_heard, status
示例数据如下:
1, 2017-01-01, bob, newspaper, attended
2, 2017-02-03, steve, mail, no show
3, 2016-04-12, mary, newspaper, no show
4, 2015-12-12, rick, mail, cancel
...
...
我现在想查询此表,以查看按年分组的每个营销工作的结果。
所以2017年,我想看到报纸有54个独特的人,有2个人参加他们的约会,0个没有节目,1个取消
因此报告的列将是:
year, how_heard, total_appointments, number_cancel, number_no_show, number_attended
我对如何做到这一点很困惑。
这可以用一个查询吗?
答案 0 :(得分:0)
是的,这是可能的。 您需要按年份和how_heard进行分组,并使用CASE语句为其他列提供条件总和。我已经完成了第一个,其余的将是相同的,除了更改等于条件和列名称
select year(start_date) year,
how_heard,
count(1) as total_appointments,
SUM(case when status = 'attended' then 1 else 0 end) as number_attended
from campaign
group by year(start_date), how_heard
找一个SQL小提琴here
使用您的测试数据和上述查询
year how_heard total_appointments number_attended
2015 mail 1 0
2016 newspaper 1 0
2017 mail 1 0
2017 newspaper 1 1