私は親posts
テーブルと子供votes
とposts.id
とvotes.post_id
の関係を持っています。私は各投稿の平均評価を数えたいが、最新の投票数は50回にすぎない。 条件がそれぞれの親の平均
SELECT T1.`title`, (
SELECT AVG(`vote`)
FROM `votes`
WHERE `votes`.`post_id` = T1.`id`
) AS `average`
FROM `posts` T1
GROUP BY T1.`id`
は、私はサブクエリで行うことが、この可能性を知っている:
SELECT T1.`title`, (
SELECT AVG(`vote`)
FROM (
SELECT `vote` FROM `votes`
WHERE `votes`.`post_id` = T1.`id`
ORDER BY `votes`.`id` DESC
LIMIT 10
) AS T2
) AS `average`
FROM `posts` T1
GROUP BY T1.`id`
をしかし、エラーがある:私はすべての票のためにそれを行う方法を知ってError in query (1054): Unknown column 'T1.id' in 'where clause'
が。 T1
サブクエリで別名にアクセスできません。何か案は?
http://sqlfiddle.com/#!9/fb9341/2
ええ、でも、AVGが追加のサブクエリを作成するので、私は依然としてサブクエリにエイリアスを渡す必要があります。 – hlcs
あなたはしません。外側のクエリを参照せずに 'votes.post_id'ごとにトップ50のクエリを行います。 'FROM'節でサブクエリとして行います。それを 'posts'テーブルに追加します。 –
私はこれを行い、それは非常に遅い4.5秒です。 – hlcs