我在数据库中有两列名称和年份的数据。像这样的东西,
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 个不同的名称。
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)
小提琴在这里。
| 归档时间: |
|
| 查看次数: |
9959 次 |
| 最近记录: |