Postgresql按联接后计数和排序

Postgresql按联接后计数和排序,sql,postgresql,Sql,Postgresql,我的webapp中有帖子、评论和喜欢的内容。我想按“分数”排序,分数只是喜欢和评论的总和 我正在尝试这样做: SELECT posts.id, COUNT(comments.id) AS c, COUNT(likes.id) AS l FROM posts LEFT JOIN comments ON posts.id = comments.post_id LEFT JOIN likes ON posts.id = likes.post_id GROUP BY posts.id ORDE

我的webapp中有帖子、评论和喜欢的内容。我想按“分数”排序,分数只是喜欢和评论的总和

我正在尝试这样做:

SELECT posts.id, COUNT(comments.id) AS c, COUNT(likes.id) AS l 
FROM posts 
LEFT JOIN comments ON posts.id = comments.post_id 
LEFT JOIN likes ON posts.id = likes.post_id 
GROUP BY posts.id 
ORDER BY SUM(c,l) desc;
但是我得到一个关于c列不存在的错误

或者这个:

SELECT posts.id, sum(count(comments.id), count(likes.id)) AS score 
FROM posts
LEFT JOIN comments ON posts.id = comments.post_id 
LEFT JOIN likes ON posts.id = likes.post_id 
GROUP BY posts.id 
ORDER BY score desc;
但是我在名称和参数类型上有一个错误


是否有其他方法编写此查询以使其正常工作?谢谢

您的思路大致正确,但出于某种原因,您尝试使用简单加法的总和:

SELECT posts.id, count(comments.id) + count(likes.id) AS score 
FROM posts
LEFT JOIN comments ON posts.id = comments.post_id 
LEFT JOIN likes ON posts.id = likes.post_id 
GROUP BY posts.id 
ORDER BY 2 desc;

我在这里使用了顺序位置排序顺序,即按第二列排序。

您的思路大致正确,但出于某种原因,您尝试使用简单加法的总和聚合整数:

SELECT posts.id, count(comments.id) + count(likes.id) AS score 
FROM posts
LEFT JOIN comments ON posts.id = comments.post_id 
LEFT JOIN likes ON posts.id = likes.post_id 
GROUP BY posts.id 
ORDER BY 2 desc;

我在这里使用了顺序位置排序顺序,即按第二列排序。

播种准确的错误。播种准确的错误。哦,老兄,我在这一列上做了一个“DUH”!我已经有一段时间没有做过比ActiveRecord=P更多的事情了。非常感谢!哦,老兄,我在这件事上做了个“DUH”!我已经有一段时间没有做过比ActiveRecord=P更多的事情了。非常感谢!