次のクエリを継承しました。このクエリは、指定された「トライ」(ラグビー用語でタッチダウン) の平均評価を取得します。うまくいけば、私たちはまだそれを扱うことができます。
SELECT i.id, i.title,
(
CASE
WHEN
COUNT( r.rating ) > 0
THEN
(
SUM( r.rating ) / COUNT( r.rating )
)
ELSE
0
END
) AS rating,
COALESCE( er.id, 0 ) AS has_existing_rating
FROM
(
SELECT 1 AS id, 'Try 1 – Israel Dagg v Chiefs.' as title UNION ALL
SELECT 2 AS id, 'Try 2 – Israel Dagg v Chiefs.' as title UNION ALL
SELECT 3 AS id, 'Try 3 – Leilia Masaga v Crusaders.' as title UNION ALL
SELECT 4 AS id, 'Try 4 – Israel Dagg v Chiefs.' as title UNION ALL
SELECT 5 AS id, 'Try 5 – Fred Flintstone v Hurricanes.' as title UNION ALL
SELECT 6 AS id, 'Try 6 – Israel Dagg v Chiefs.' as title UNION ALL
SELECT 7 AS id, 'Try 7 – Israel Dagg v Chiefs.' as title
) AS i
LEFT OUTER JOIN
tryPoll r
ON
i.id = r.try_id
<!--
Join this to the rating table AGAIN to see if the current
user has already rated the given try.
-->
LEFT OUTER JOIN
tryPoll er
ON
(
er.try_id = i.id
AND
er.ip_address = '#cgi.remote_addr#'
AND
er.user_agent = '#cgi.http_user_agent#'
)
GROUP BY
i.id,
r.try_id,
er.id,
i.title
ORDER BY
i.id ASC
したがって、次の表を考えると (この場合、評価 = 1 は単純に 1 票を意味します) ....
tryPoll
id try_id rating ip_address user_agent
------------------------------------------------------
1 2 1 58.28.220.51 Mozilla/5.0 blah
2 2 1 58.28.220.52 Mozilla/5.0 blah
3 6 1 58.28.220.53 Mozilla/5.0 blah
4 4 1 58.28.220.54 Mozilla/5.0 blah
...クエリは、try_id #2 に対して (1 + 1) / 2 = 1 の平均評価を返します
ただし、このクエリを調整して、すべての試行に対する評価よりも特定の試行に対する評価のパーセンテージを返す必要があります。つまり、上記の例では、すべての試行に対するすべての評価の何パーセントが try_id #2 に起因するかを判断します。
どうすればこれを達成できますか?