SQL多列排序

Señ*_*cis 590 sql sql-order-by

我试图在SQL中以不同的方向排序多个列.column1将按降序排序,并按column2升序排序.

我怎样才能做到这一点?

Ign*_*ams 962

ORDER BY column1 DESC, column2
Run Code Online (Sandbox Code Playgroud)

当两个或多个行的字段相等时,这将column1首先按(降序)排序,然后按column2(升序,这是默认值)排序column1.

  • 为清楚起见,只要两列的`column1`字段相等,这首先按`column1`排序,然后按`column2`排序. (95认同)
  • 这里如何订购column1或column2? (2认同)
  • @PoliDev,它首先按降序排列按列 1 排序,然后按升序排列按列 2 排序 (2认同)
  • 它将适用于任意数量的表达式(*不仅*仅是列),最高可达RDBMS的限制。 (2认同)
  • @NickBenes ...或者您可以说:它按`column2`排序,然后按`column1`执行稳定排序。对于知道什么是稳定排序的人来说,这更加清楚。 (2认同)

Tho*_*ena 332

其他答案缺乏一个具体的例子,所以在这里:

给出以下People表:

 FirstName |  LastName   |  YearOfBirth
----------------------------------------
  Thomas   | Alva Edison |   1847
  Benjamin | Franklin    |   1706
  Thomas   | More        |   1478
  Thomas   | Jefferson   |   1826
Run Code Online (Sandbox Code Playgroud)

如果您执行以下查询:

SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC
Run Code Online (Sandbox Code Playgroud)

结果集如下所示:

 FirstName |  LastName   |  YearOfBirth
----------------------------------------
  Thomas   | More        |   1478
  Thomas   | Jefferson   |   1826
  Thomas   | Alva Edison |   1847
  Benjamin | Franklin    |   1706
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是非常有用且简短的答案的一个很好的补充. (19认同)
  • 这是一个很好的例子,许多人认为你如何在单个时间排序2列,即使你为订单查询放了2列,实际上也不会发生这种情况 (3认同)
  • @ParameshKorrakuti:这是预期的结果。仅当存在具有不同“YearOfBirth”的重复“FirstName, LastName”条目时,示例中的结果排序才会有所不同 (3认同)

Qua*_*noi 133

SELECT  *
FROM    mytable
ORDER BY
        column1 DESC, column2 ASC
Run Code Online (Sandbox Code Playgroud)


Jas*_*ark 16

多列排序取决于列的相应值:这是我的表示例,其中有两列用Alphabets和Numbers命名,这两列中的值是ascdesc命令.

在此输入图像描述

现在我通过执行以下命令在这两列中执行Order By:

在此输入图像描述

现在我再次在这两列中插入新值,其中Alphabet值按ASC顺序排列:

在此输入图像描述

并且Example表中的列看起来像这样.现在再次执行相同的操作:

在此输入图像描述

您可以看到第一列中的值是按顺序排列,但第二列不是ASC顺序.

  • 也插入此数据“(g, ​​10),(g,12)”。然后,运行排序查询,您将获得第二列“ASC”顺序(这意味着“g-10,g-11,g-12)” (2认同)

ati*_*ker 10

您可以在多个条件下使用多个排序,

ORDER BY 
     (CASE 
        WHEN @AlphabetBy = 2  THEN [Drug Name]
      END) ASC,
    CASE 
        WHEN @TopBy = 1  THEN [Rx Count]
        WHEN @TopBy = 2  THEN [Cost]
        WHEN @TopBy = 3  THEN [Revenue]
    END DESC 
Run Code Online (Sandbox Code Playgroud)

  • 如果我在“ORDER BY”中使用“CASE”,索引是否有效? (2认同)

Sos*_*are 9

SELECT id,  \n  first_name,\n  last_name,\n  salary\nFROM employee\nORDER BY salary DESC, last_name; \n
Run Code Online (Sandbox Code Playgroud)\n

如果您想从表中选择记录,但希望看到它们根据两列排序,则可以使用 ORDER BY 来实现。该子句出现在 SQL 查询的末尾。

\n

在 ORDER BY 关键字之后,添加您\xe2\x80\x99d 首先要用来对记录进行排序的列的名称(在我们的示例中为工资)。然后,在逗号后添加第二列(在我们的示例中为last_name)。您可以单独修改每列的排序顺序(升序或降序)。如果想使用升序(从低到高)排序,可以使用ASC关键字;不过,此关键字是可选的,因为这是未指定时的默认顺序。如果要使用降序,请将 DESC 关键字放在相应的列后面(在示例中,我们对工资列使用降序)。

\n


小智 6

尝试

'select * FROM users ORDER BY id DESC, name ASC, age DESC 
Run Code Online (Sandbox Code Playgroud)


小智 5

通过Intellij DataGrip编译

SELECT * FROM EMP ORDER BY DEPTNO ASC, JOB DESC