mysql - 进行聚合查询的不同方法

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

我想知道是否有更好的方法来做到这一点 源字段可能取值范围很广,因此报告 不太适合更大的数据。

最佳答案

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/

相关文章:

java - 如何在 JPA 中设置默认架构

python - 从 groupby pandas 中获取 MultiIndex

php - 无法使用 MDB2 连接到 MySQL 数据库(未找到错误)

java - MySQLNonTransientConnectionException : Client does not support authentication protocol requested by server; consider upgrading MySQL client

sql - 如何在 PostgreSQL 中查询 JSON 列以获取唯一对象值

sql - GROUP BY TRUNC 的链(日期)

Python:将两列分组在一起并找到第三列的总和

java - 如何通过 Web 服务传递自定义对象

php - 错误的 PHP 代码可能导致此问题(错误 :Connection timed out) type of errors in FTP?

php - 如何加入这些表?