【发布时间】:2013-12-26 11:50:08
【问题描述】:
我有一个看起来像这样的架构:
id type date
1 like 2013-12-25
2 comment 2013-12-25
3 like 2013-12-26
4 comment 2013-12-26
我想要做的是聚合并计算特定对象上的所有喜欢和 cmets,并在单个查询中检索它们。现在我正在使用这个:
SELECT
(CASE WHEN type = 'like' THEN COUNT(id) END) as likes,
(CASE WHEN type = 'comment' THEN COUNT(id) END) as comments,
date_trunc('day', date)
FROM
my_table
GROUP BY date_trunc('day', date), type
问题是,这些行没有以正确聚合数据的方式返回。那么如何使用 group by 在同一列上检索不同的值呢?
此外,所使用的数据库是 Postgres,但也是一个可以接受答案的 Mysql 解决方案。
【问题讨论】:
-
尝试类似:SELECT SUM(CASE WHEN type = 'like' THEN 1 ELSE 0 END) as likes, SUM(CASE WHEN type = 'comment' THEN 1 ELSE 0 END) as cmets, date_trunc ('day', date) FROM my_table GROUP BY date_trunc('day', date)
-
考虑在应用程序级别处理数据显示的问题,例如在 PHP 中使用一个简单的循环
-
如果是答案,我可以标记为正确
-
不介意自己添加作为答案并接受它。
标签: mysql sql select count group-by