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

次のgroupbyクエリは出力を表示しますが、上記の形式では表示されません

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

ありがとう

4

1 に答える 1

2

既存のクエリをサブクエリでラップすると、その周りにピボット テーブルを作成できます。`MAX() 集計の目的はNULL、ステートメントによって生成されたを削除することだけです。CASEそのため、ID ごとに複数の行を、各列に非 NULL を持つ ID ごとに 1 つの行にまとめます。

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 に答える