以特定格式显示结果MYSQL

时间:2012-10-18 01:53:03

标签: mysql sql

我有一张像

这样的表格
ID  Name Points
1   A     10
1   A     11
1   B     11
1   B     12
1   C     12
1   C     13
2   A      8
2   A      9
2   B      9
2   B     10
2   C     10
2   C     11

我希望我的输出看起来像下面的

ID   Average(A)  Average(B)  Average(C)
1     10.5          11.5         12.5
2      8.5           9.5         10.5

以下按查询分组显示输出但不是上述格式

Select Avg(Points),ID,name from table group by Name,ID

由于

1 个答案:

答案 0 :(得分:2)

在子查询中包装现有查询将允许您围绕它构建数据透视表。 `MAX() 聚合的目的只是消除NULL语句生成的CASE,因此每个ID将多个行折叠为每个ID一行,每列中包含非NULL。

SELECT
  ID,
  MAX(CASE WHEN Name = 'A' THEN Points ELSE NULL END) AS `Average (A)`,
  MAX(CASE WHEN Name = 'B' THEN Points ELSE NULL END) AS `Average (B)`,
  MAX(CASE WHEN Name = 'C' THEN Points ELSE NULL END) AS `Average (C)`
FROM (
  SELECT ID, AVG(Points) AS Points, Name FROM yourtable GROUP BY Name, ID
) avg_subq
GROUP BY ID

Here is a live demonstration on SQLFiddle