[英]Order by count on subquery
我有2张桌子。 1个用于场地,1个用于评论。 我正在尝试使用sql语句查询表并根据review表中的计数对结果进行排序。 它还需要返回没有评论的场所,但它们应该在结果集的末尾。
我当前的SQL语句是:
SELECT * , (
SELECT COUNT( * ) AS cnt
FROM ratings r
WHERE r.venue_id = v.id
ORDER BY cnt DESC
)
FROM venues AS v
LEFT JOIN ratings AS r ON r.venue_id = v.id
WHERE v.active = '1'
GROUP BY r.venue_id
LIMIT 20
但是,这只是返回不按递减计数顺序排列的结果......即使没有评级,它也不会返回所有场地。
如果我正确理解了请求,则此查询应生成您期望的结果:
SELECT v.*, COUNT(*) AS cnt
FROM venues AS v
LEFT JOIN ratings AS r ON r.venue_id = v.id
WHERE v.active = '1'
GROUP BY r.venue_id
ORDER BY cnt DESC
也许你应该做这样的事情。 我希望我做对了,我没有合适的验证器。
SELECT *
FROM venues as v LEFT JOIN (
SELECT COUNT( * ) AS cnt, r.venue as ven_id
FROM ratings r
GROUP BY ven_id
) as counts
ON v.id = ven_id
WHERE v.active = '1'
ORDER BY cnt DESC
LIMIT 20
主要区别在于我还选择了场地ID以及其评论计数。 所以我们有一个有序的数量 内部查询中的venue_id列表。 然后,您可以从场地表到子查询中的ven_id加入场地ID。 我将GROUP BY移动到子查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.