需要帮助,在一个选择语句中对两列进行排序

时间:2019-03-30 21:43:49

标签: mysql sql mariadb

我知道我可以使用ORDER BY对一列数据进行排序,但是我想使用ORDER BY对两列进行排序并将结果显示在一个表视图中。

我尝试使用逗号分隔的列表,但这并没有达到我想要的方式。我希望它对两列进行排序,而与行必须位于特定位置无关。

SELECT * FROM top_5_films ORDER BY position DESC;

我希望对两列数据都进行排序,并且不希望将字段绑定到行上。

1 个答案:

答案 0 :(得分:0)

正如@forpas所评论的那样,您似乎正在寻找创建不相关数据的记录。这在SQL中是一个很奇怪的要求...

假设您的RDBMS支持窗口功能ROW_NUMBER(),则可以执行以下操作:

  • 为两列中的每列创建一个子查询,该子查询选择该列并为每条记录分配一个行号,并按列本身进行排序
  • 然后JOIN分别查询两个子行的行号
  • 最后,按行号排序

考虑:

SELECT c1.col1, c2.col2
FROM 
    (
        SELECT col1, ROW_NUMBER() OVER(ORDER BY col1) rn FROM top_5_films
    ) c1
    INNER JOIN (
        SELECT col2, ROW_NUMBER() OVER(ORDER BY col2) rn FROM top_5_films
    ) c2  ON c1.rn = c2.rn
ORDER BY c1.rn

Demo on DB Fiddle

样本数据:

| col1 | col2 |
| ---- | ---- |
| ghi  | RST  |
| abc  | UVW  |
| lmn  | OPQ  |

结果:

| col1 | col2 |
| ---- | ---- |
| abc  | OPQ  |
| ghi  | RST  |
| lmn  | UVW  |