我想找到一种方法来按照特定的顺序显示我的用户。
id | sex | trending | date_registered
---+--------+----------+----------------
1 | male | 1 | 29-04-2020
2 | male | 1 | 28-04-2020
3 | male | 0 | 27-04-2020
4 | female | 1 | 26-04-2020
5 | female | 1 | 25-04-2020
6 | female | 0 | 24-04-2020
7 | female | 0 | 23-04-2020
8 | male | 1 | 22-04-2020
9 | male | 0 | 21-04-2020
到目前为止,我能够显示趋势用户,然后使用这个查询显示最近注册的用户。
SELECT *
FROM users
ORDER BY users.trending DESC, users.date_registered DESC
但我需要找到一种方法来分离男性和女性。
这就是我想要的输出顺序。
id | sex | trending | date_registered | order_wanted
---+--------+----------+-----------------+-------------
1 | male | 1 | 29-04-2020 | 5
2 | male | 1 | 28-04-2020 | 6
3 | male | 0 | 27-04-2020 | 8
4 | female | 1 | 26-04-2020 | 1
5 | female | 1 | 25-04-2020 | 2
6 | female | 0 | 24-04-2020 | 3
7 | female | 0 | 23-04-2020 | 4
8 | male | 1 | 22-04-2020 | 7
9 | male | 0 | 21-04-2020 | 9
如果我的逻辑正确的话,你的条件可以简化为三个排序键。
您可以使用 row_number()
:
select u.*,
row_number() over (order by trending desc, gender asc, date_registered desc) as ord
from users u
注意: order
是一个非常糟糕的列名,因为它是一个SQL关键字。
如果你不想要一个单独的列,那么只需要使用下面的 order by
为整个查询。
order by trending desc, gender asc, date_registered desc
试着用下面的查询。
SELECT *
FROM users
ORDER BY date_registered desc, sex, trending;