首页 > 解决方案 > PostgreSQL:如果有平局,则基于另一列排序?

问题描述

我如何根据两列对行进行排序,首先按 排序column1,但如果行具有相同的值(并列),则按 排序column2

id | likes | date
---+-------+-----
0      0     203
1      8     100
2      4     24
3      1     340
4      4     262
5      4     82

因此,对于上面的示例表,likes首先基于排序,然后对于具有 的 3 行4,排序基于date DESC

注意:date只有任意的 unix 时间戳值

编辑: 这是我正在使用的实际查询:

SELECT * FROM (SELECT posts.id, posts.topic_id, topics.name, 
posts.author_id, users.username, users.profile_pic, posts.date_posted, 
posts.body, posts.coordinates, (SELECT COUNT(*) FROM post_likes WHERE 
post_likes.post_id = posts.id) AS num_likes, 
ROW_NUMBER () OVER (ORDER BY (SELECT COUNT(*) FROM post_likes WHERE 
post_likes.post_id = posts.id) DESC, posts.date_posted DESC) AS RowNum 
FROM posts INNER JOIN users ON posts.author_id = users.id INNER JOIN 
topics ON posts.topic_id = topics.id WHERE author_id = 'foo') AS 
RowConstrainedResult WHERE RowNum > 0 AND RowNum <= 20 ORDER BY RowNum

标签: sqlpostgresql

解决方案


你会命令它是

<
select 
 from table
>
order by likes desc
         , date desc

推荐阅读