次の単純なクエリを検討してください。
SELECT
year(t.date) AS y,
month(t.date) AS m,
t.person_id AS id,
count(*) AS freq
FROM
table t
WHERE
t.date>='2013-01-01' AND t.date<='2013-06-30'
GROUP BY y, m, id
これにより、次のような結果が得られます。
y m id freq
------------------
2013 1 100 2
2013 1 101 7
2013 1 102 1
2013 2 100 5
2013 2 101 4
2013 2 102 11
...
各月の頻度の合計に対する頻度の割合を含む列を追加したいと思います。
y m id freq perc
-----------------------
2013 1 100 2 20
2013 1 101 7 70
2013 1 102 1 10
2013 2 100 5 25
2013 2 101 4 20
2013 2 102 11 55
...
これまでの私の解決策は、これをselect句に追加することです:
count(*) * 100 / (SELECT count(*) FROM table WHERE year(date)=y AND month(date)=m) AS perc
しかし、特に必要なすべての値が最初のクエリの結果に既に存在するため、副選択は避けたいと思います。これには集計値の集計が必要ですが、これを行う方法がわかりません。何か案は?