【问题标题】:SQL advanced sorting using ORDER BY使用 ORDER BY 的 SQL 高级排序
【发布时间】:2014-09-24 15:49:29
【问题描述】:

我不知道如何使用 ORDER BY 子句对我的一些结果进行排序。我正在使用 PostgreSQL,并且我有一个记录用户在我的应用程序中执行的操作的表。它记录了user_id、message_date、message_subject。这是我当前用于从该表中选择的 SQL 语句:

SELECT 
  message_subject, 
  count (message_subject) AS message_count,
  user_id,
  message_date,

FROM 
  view_app_message

WHERE
  message_date >= $P{FROM} AND message_date <= $P{TO} AND
  belongs_to IN ($P{RESTAURANT_IDS})

GROUP BY
  message_date,
  user_id,
  message_subject

ORDER BY
  message_date,
  user_id,
  message_count DESC

这给了我如下所示的结果:

message_subject | message_count | user_id | message_date
   login        |       2       |    1    | 2014.04.01
   error        |       1       |    1    | 2014.04.01
   payment      |       1       |    1    | 2014.04.01
   login        |       7       |    2    | 2014.04.01
   error        |       5       |    2    | 2014.04.01
   login        |       10      |    1    | 2014.04.02
   error        |       9       |    1    | 2014.04.02
   login        |       2       |    2    | 2014.04.02
   payment      |       1       |    2    | 2014.04.02

我想要的是按每个用户的所有message_counts 的总数对这些记录进行排序。例如,用户 1 有 4 条来自 2014.04.01 的消息,用户 2 有 12 条消息。用户 2 的记录应在用户 1 的记录之前按降序排序,如下所示:

message_subject | message_count | user_id | message_date
   login        |       7       |    2    | 2014.04.01
   error        |       5       |    2    | 2014.04.01
   login        |       2       |    1    | 2014.04.01
   error        |       1       |    1    | 2014.04.01
   payment      |       1       |    1    | 2014.04.01

我不明白,因为我很傻。有人可以帮我吗? :D

【问题讨论】:

    标签: sql sql-order-by


    【解决方案1】:

    你很幸运,因为order by 子句中允许使用窗口函数:

    ORDER BY message_date,
             sum(count (message_subject)) over (partition by message_date, user_id) desc,
             user_id,
             message_count DESC
    

    【讨论】:

    • 感谢戈登的回复。此查询对我不起作用,我从数据库中收到以下错误:ERROR: column "message_count" does not exist LINE 26: sum(message_count), 似乎我无法使用 PostgreSQL 做到这一点:postgresql.org/message-id/1632.1128539471@sss.pgh.pa.us
    • 哎呀!好的,我短暂地使用了我的大脑并且能够让它工作。而不是sum(message_count),我改为使用sum(count(message_subject)),这很有效。如果您更新您的答案以获取有关如何使用别名列的这个小细节(或者您自己的解决方案),我会接受您的答案!
    • @DavidJacob 。 . .这将是 group by 查询的正确表述。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2017-05-23
    • 1970-01-01
    • 2015-11-05
    相关资源
    最近更新 更多