MySql查询以矩阵形式从数据库中提取数据

Zer*_*ero 0 mysql matrix

我在数据库中有两列名称和年份的数据。像这样的东西,

name | year
-----------
tim  | 2001
ron  | 2002
tim  | 2003
ron  | 2005
tim  | 2004
pol  | 2002
pol  | 2001
tim  | 2003
pol  | 2004
tim  | 2002
Run Code Online (Sandbox Code Playgroud)

我想输出这样的结果矩阵。

      tim | pol | ron
2001   1  |  1  |  0
2002   1  |  1  |  1
2003   2  |  0  |  0
2004   1  |  1  |  0
2005   0  |  0  |  1
Run Code Online (Sandbox Code Playgroud)

蒂姆 | 波尔 | ron 根据累积和按降序排列,即 tim(5)、pol(3)、ron(2)。

数据不限于 tim,pol,ron。可以有 n 个不同的名称。

fth*_*lla 5

SELECT
  year,
  SUM(name='tim') tim,
  SUM(name='pol') pol,
  SUM(name='ron') ron
FROM
  yourtable
GROUP BY
   year
Run Code Online (Sandbox Code Playgroud)

在此处查看小提琴。

编辑:如果您需要动态查询,因为值的确切数量可能会有所不同,您可以使用这样的准备好的语句:

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;
Run Code Online (Sandbox Code Playgroud)

小提琴在这里