进行聚合查询的不同方法

时间:2017-08-13 20:54:42

标签: mysql sql group-by report

我目前有一张桌子,我正在跟踪一系列跟踪此类事件来源的事件。 我目前正在创建一份报告,总结了此类事件的所有不同来源。

表格如下

-------------------------------------
| 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;

我想知道是否有更好的方法来做到这一点 源字段可能会采用各种值,因此报告 不适合大型数据。

1 个答案:

答案 0 :(得分:1)

if条件是多余的,因为mysql已经将布尔值评估为1或0.此外,您是不是要选择franchise_id,这是您要分组的键,而不是{ {1}}?

除非您不关心选择组中的哪个值,否则您应该只选择组中的列:

company_id