2

我有一张像

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

以下 group by 查询显示输出但不是上述格式

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

谢谢

4

1 回答 1

2

将现有查询包装在子查询中将允许您围绕它构建数据透视表。聚合的`MAX() 目的只是消除语句NULL产生的 s 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

这是关于 SQLFiddle 的现场演示

于 2012-10-18T01:57:22.000 回答