我在数据库中有两列名称和年份的数据。像这样,
name | year
-----------
tim | 2001
ron | 2002
tim | 2003
ron | 2005
tim | 2004
pol | 2002
pol | 2001
tim | 2003
pol | 2004
tim | 2002
我想输出这样的结果矩阵。
tim | pol | ron
2001 1 | 1 | 0
2002 1 | 1 | 1
2003 2 | 0 | 0
2004 1 | 1 | 0
2005 0 | 0 | 1
蒂姆 |波尔 | ron按照累计和降序排列即tim(5), pol(3), ron(2)。
数据不限于tim,pol,ron。可以有 n 个不同的名称。
最佳答案
SELECT
year,
SUM(name='tim') tim,
SUM(name='pol') pol,
SUM(name='ron') ron
FROM
yourtable
GROUP BY
year
请参阅 fiddle here .
编辑:如果您需要动态查询,因为值的确切数量可能会有所不同,您可以使用这样的准备语句:
SELECT
CONCAT('SELECT year,',
GROUP_CONCAT(sums),
' FROM yourtable GROUP BY year')
FROM (
SELECT CONCAT('SUM(name=\'', name, '\') AS `', name, '`') sums
FROM yourtable
GROUP BY name
ORDER BY COUNT(*) DESC
) s
INTO @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
fiddle 是 here .
关于MySql查询从数据库中以矩阵形式提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17400206/