繁体   English   中英

按子计数的顺序排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM