【问题标题】:Group and Sort based on JOIN and 2 different columns基于 JOIN 和 2 个不同的列进行分组和排序
【发布时间】:2021-11-08 18:17:12
【问题描述】:

这是我当前的 SQL 代码,它按 created_at 列排序帖子:

    select users.name as user_name, * 
    from posts
    join users on users.id = posts.user_id
    order by posts.created_at desc;
  • 这是返回最近创建的帖子订单
  • 现在我还想按用户名对我的帖子进行分组,保持相同的顺序。

例子:

user_name post created_at
A X 2021-09-13
B P 2021-09-12
A Y 2021-09-12
B Q 2021-09-11
A Z 2021-09-11

要求

  • 按 user_name 分组帖子,按 created_at 排序
  • 还要注意,created_at 的排序顺序应该优先,然后按created_at desc 的顺序对用户进行分组。
user_name post created_at
A X 2021-09-13
A Y 2021-09-12
A Z 2021-09-11
B P 2021-09-12
B Q 2021-09-11

【问题讨论】:

    标签: sql postgresql postgresql-9.1


    【解决方案1】:

    如果您只想按用户名订购,您可以使用:

    order by user_name, created_at desc
    

    如果你想要最近的用户,你可以使用窗口函数:

    order by max(created_at) over (partition by user_name) desc,
             user_name,
             created_at desc
    

    【讨论】:

    • 我使用了这两个函数,实际上created_at 的顺序在这两种情况下都不正确。基本上,Record 应该总是首先显示最近的记录,然后它需要对保持该订单的供应商进行分组。
    • 为了提供更多信息@gordon-linoff first record 它应该显示的总是今天的记录,但是如果我尝试上述解决方案,供应商会被正确分组,但 created_at 日期首先是昨天的日期,然后在记录的中间,我看到今天日期的集团供应商。 i.imgur.com/Cm62eyT.png查看截图为例
    • @przbadu 。 . . .完全输了。您的数据中没有供应商,您的查询是由created_at 订购的。
    • 对不起,我在这里引用了错误的列名,我会更新我的评论,但我的意思是user_name
    • @przbadu 如果将desc 添加到第一个排序表达式,会发生什么?
    猜你喜欢
    • 1970-01-01
    • 2015-04-26
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多