【问题标题】:How can I sort rows by number of corresponding rows in different table?如何按不同表中的相应行数对行进行排序?
【发布时间】:2019-02-14 04:38:18
【问题描述】:

我正在制作一个小规模的 reddit 克隆。有一个posts 表,一个cmets 表(仅与上下文相关),还有一个posts_cmets 表。我正在尝试按帖子拥有的 cmets 数量对帖子进行排序。

这是posts_cmets表的初始化

CREATE TABLE posts_comments (
    id SERIAL PRIMARY KEY,
    parent_id INTEGER,
    comment_id INTEGER,
    post_id INTEGER
)

这是我的电话,但似乎不对

SELECT * FROM posts p
JOIN posts_comments pc ON p.id = pc.post_id
ORDER BY (SELECT COUNT(*) FROM pc WHERE pc.post_id = p.id) DESC
LIMIT $1
OFFSET $2

我希望输出是按链接到该帖子的 cmets 数量排序的帖子列表

【问题讨论】:

  • 将您的查询用作FROM 子句中的子选择并添加ORDER BY

标签: postgresql


【解决方案1】:

可能是这样的:

SELECT
   COUNT(pc.post_id) OVER (PARTITION BY p.id)  AS  num_comments 
    ,* FROM posts p
   LEFT OUTER JOIN posts_comments pc ON p.id = pc.post_id
ORDER BY 1 DESC
LIMIT $1
OFFSET $2

其中你只想要帖子列表而不是 cmets。

SELECT
   COUNT(pc.post_id) AS  num_comments 
   ,p.* FROM posts p
   LEFT OUTER JOIN posts_comments pc ON p.id = pc.post_id
GROUP BY p.id
ORDER BY 1 DESC
LIMIT $1
OFFSET $2

【讨论】:

  • 这行得通!我添加的一个调整是在 SELECT 之后包含 DISTINCT,然后将 * 更改为 p.*,否则您会得到每个评论的帖子副本
  • 我以为您希望每条评论有一行。
猜你喜欢
  • 2014-03-23
  • 1970-01-01
  • 2020-01-23
  • 2011-02-03
  • 2023-01-19
  • 2017-10-30
  • 2016-02-10
  • 1970-01-01
  • 2010-11-28
相关资源
最近更新 更多