我有父母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