我有MySQL表,以这种格式存储数据
Type|Month|Count
----+-----+-------
1 |9 |4
3 |9 |7
99 |9 |2
1 |10 |6
3 |10 |7
99 |10 |9
.......
类型列可以包含3个值1,3,99中的任何一个。 月份将保持1到12之间的值。 伯爵可以是随机的。
我想要的输出是这样的:
Month|Type1|Type3|Type99
-----+-----+-----+-------
9 |4 |7 |2
10 |6 |7 |9
................
我偶然发现了this Demo,但对此并不了解。
以下是带有演示数据的示例fiddle。
感谢任何帮助。
答案 0 :(得分:3)
尝试以下查询,您需要知道的是MYSQL枢轴,以下查询解决了您的问题
静态方式
SELECT Month,
SUM(CASE WHEN Type = 1 THEN 'count' ELSE 0 END) AS Type1,
SUM(CASE WHEN Type = 3 THEN 'count' ELSE 0 END) AS Type3,
SUM(CASE WHEN Type = 99 THEN 'count' ELSE 0 END) AS Type99
FROM my_table
GROUP BY Month
DYNAMIC WAY
一起使用SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT('SUM(CASE WHEN Type= ',
Type, ' THEN count ELSE 0 END) AS '
, 'Type', Type))
INTO @sql
FROM
my_table;
SET @sql = CONCAT('SELECT Month, ', @sql, '
FROM my_table
GROUP BY Month');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;