【问题标题】:MySQL multiple counts per queryMySQL 每个查询多次计数
【发布时间】:2020-05-07 23:32:21
【问题描述】:

我有一个包含 2 个字段、状态和日期时间的表。我想统计每种状态类型。

我的桌子:

datetime, status set(0,1,2,3)

我的查询:

select date_format(mydate,'%d-%m') as days, count(*) as total, status from mytable where mydate >= date_sub(curdate(), interval 30 day) group by days, status ORDER BY days DESC

我的查询返回的内容:

07/05/2020 1234 0
07/05/2020 8277 1
07/05/2020 2343 2
07/05/2020 9827 3

我想要什么:

07/05/2020 1234 8277 2343 9827
06/05/2020 .... .... ... ...
05/05/2020 . . . .

【问题讨论】:

    标签: mysql sql group-by count pivot


    【解决方案1】:

    如果你有一个预定义的statuses 列表,你可以进行条件聚合:

    select
        date(mydate) days,
        sum(status = 0) status_O,
        sum(status = 1) status_1,
        sum(status = 2) status_2,
        sum(status = 3) status_3
    from mytable
    where mydate >= current_date - interval 30 day
    group by days
    

    否则,您需要动态 SQL;也就是说,使用查询来生成实际的查询,然后执行它。

    对于您的用例,应该如下所示:

    set @sql = null;
    
    select group_concat(
        distinct concat('sum(status = ', status, ') as status_', status)
        delimiter ', '
        order by status
    ) into @sql
    from mytable;
    
    set @sql = concat('select date(mydate) days, ', @sql, ' from mytable group by days');
    
    prepare stmt from @sql;
    execute stmt;
    deallocate prepate stmt;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 2015-04-30
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多