我目前有一张表,我在其中跟踪一堆事件,跟踪此类事件的起源。 我目前正在创建一份公司报告,总结此类事件的所有不同来源。
表格如下
-------------------------------------
| company_id | source | date |
-------------------------------------
| 156012 | facebook | 2016-08-22|
| 156012 | twitter | 2016-08-22|
| 156012 | facebook | 2016-08-12|
| 160781 | twitter | 2016-07-20|
| 160781 | twitter | 2016-07-20|
我省略了几个字段,这只是示例数据。我正在收集一份报告,按来源统计每家公司的事件。我希望我的报告看起来像这样
| company_id | facebook | twitter |
------------------------------------
| 156012 | 2 | 1 |
| 150781 | 2 | 0 |
目前我是这样做的
select company_id,
sum(if(track.source = 'facebook', 1,0)) as facebook,
sum(if(track.source = 'twitter', 1,0)) as twitter,
from event_tracks as track
group by franchise_id
order by total_clicks desc limit 10;
我想知道是否有更好的方法来做到这一点 源字段可能取值范围很广,因此报告 不太适合更大的数据。
最佳答案
if
条件是多余的,因为 mysql 已经将 bool 值计算为 1 或 0。此外,您是否打算选择 franchise_id
,这是您要分组的键by,而不是company_id
?
除非您不关心从组中选择了哪个值,否则您应该只选择组中的列:
select franchise_id,
sum(track.source = 'facebook') as facebook,
sum(track.source = 'twitter') as twitter,
from event_tracks as track
group by franchise_id
order by total_clicks desc limit 10;
关于mysql - 进行聚合查询的不同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45664834/