我无法弄清楚如何使用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_count
的总和来订购这些记录。例如,用户1有来自2014.04.01的4条消息,用户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
答案 0 :(得分:0)
您很幸运,因为order by
子句中允许使用窗口函数:
ORDER BY message_date,
sum(count (message_subject)) over (partition by message_date, user_id) desc,
user_id,
message_count DESC