【问题标题】:Aggregating Different Column Types With Group By使用 Group By 聚合不同的列类型
【发布时间】: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


【解决方案1】:

试试这个..

    SELECT  SUM(IF(type ='like',1,0) )as Likes, 
            SUM(IF(type='comment',1,0)) comments, 
            DAY(DATE) 'day'
    FROM `test_types`
    GROUP BY  DAY(DATE)

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT DAY(tt.DATE) 'day', SUM(tt.type ='like')AS Likes, 
           SUM(tt.type='comment') comments
    FROM `test_types` tt
    GROUP BY DAY(tt.DATE)
    

    【讨论】:

      猜你喜欢
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 2014-11-22
      • 2014-12-27
      • 2017-09-16
      • 1970-01-01
      相关资源
      最近更新 更多