MySQL每天计数类型

MySQL每天计数类型,mysql,sql,database,Mysql,Sql,Database,所以我有一张桌子 | date | name | type | 我想将数据转换成一个表,统计每种类型的名称在每个日期出现的数量 | date | count(type_a) | count(type_b) | .... 我有两种类型,所以我做了这个 SELECT t0.date, type_a, type_b FROM (SELECT DISTINCT date from my_table) AS t0 LEFT JOIN (SELECT date, COUNT(name) AS type

所以我有一张桌子

| date | name | type |
我想将数据转换成一个表,统计每种类型的名称在每个日期出现的数量

| date | count(type_a) | count(type_b) | ....
我有两种类型,所以我做了这个

SELECT t0.date, type_a, type_b 
FROM
(SELECT DISTINCT date from my_table) AS t0
LEFT JOIN (SELECT date, COUNT(name) AS type_a
           FROM my_table
           WHERE type='type_a'
           GROUP BY date) AS t1
    ON t0.date = t1.date
LEFT JOIN (SELECT date, COUNT(name) AS type_b
           FROM my_table
           WHERE type='type_b'
           GROUP BY date) AS t2 
    ON t0.date = t2.date
但我觉得这是一种过度的杀伤力,对于更多的类型来说,它变得太重复了


假设我有4种类型。我确信我还缺少一些更好的东西。

您可以有条件地汇总案例陈述:

select date,
       sum(case when type = 'type_a' then 1 else 0 end) as type_a,
       sum(case when type = 'type_b' then 1 else 0 end) as type_b
from   tbl
group by date
为其他类型添加其他case语句

上面显示了不带类型a或类型b值的日期的零,这与外部联接的逻辑相匹配。如果您根本不想要这样的日期,可以添加以下where子句:

where  type in ('type_a','type_b')

谢谢当我有太多类型而无法像这样手动执行时,有什么解决方案吗?@AndreiIvanov不是一个纯粹的sql解决方案,只要您的预期列依赖于输出,您就必须依赖动态sql