我有这张表:
Month Type
JAN A
JAN A
FEB B
FEB B
FEB A
FEB A
我想运行一个按月分组的查询,并计算该月某个类型的出现次数。
所以对于上表,输出应该是:
A B
JAN 2 0
FEB 2 2
这可能是不可能的,但我想我会试一试。 谢谢。
最佳答案
不幸的是,MySQL 没有 PIVOT
函数,这基本上就是您要尝试做的。因此,您需要使用带有 CASE
语句的聚合函数:
SELECT Month,
SUM(case when type = 'A' then 1 ELSE 0 END) as A,
SUM(case when type = 'B' then 1 ELSE 0 END) as B
FROM yourTable
GROUP BY month
现在,如果您想动态地执行此操作,这意味着您事先不知道要转置的列,那么您应该查看以下文章:
Dynamic pivot tables (transform rows to columns)
您的代码如下所示:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(case when type = ''',
type,
''' then 1 ELSE 0 END) AS ',
type
)
) INTO @sql
FROM test;
SET @sql = CONCAT('SELECT month, ', @sql, ' FROM test GROUP BY month');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
关于mysql - 将列数据转换为列并按其分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12117166/