Oracle ORDER BY多列不起作用

时间:2019-02-02 15:50:41

标签: sql oracle sql-order-by

我试图使用Oracle的ORDER BY语句对多个列,但只有一列进行排序。我的查询是

SELECT s.STDLASTNAME, s.STDFIRSTNAME, s.STDGPA
FROM Student s
ORDER BY 
    s.STDGPA DESC,
    s.STDLASTNAME,
    s.STDFIRSTNAME;

这是我的结果:

STDLASTNAME STDFIRSTNAME    STDGPA
COLAN       CRISTOPHER      4
PILGRIM     WILLIAM         3.8
DODGE       MARIAH          3.6
KENDALL     CANDY           3.5
DODGE       TESS            3.3
ESTRADA     JOE             3.2
WELLS       HOMER           3
KENDALL     WALLY           2.8
NORBERT     BOB             2.7
MORALES     ROBERTO         2.5
BRAZZI      LUKE            2.2

但是我希望得到:

STDLASTNAME STDFIRSTNAME    STDGPA
BRAZZI      LUKE            2.2
COLAN       CRISTOPHER      4
DODGE       MARIAH          3.6
DODGE       TESS            3.3
ESTRADA     JOE             3.2
KENDALL     CANDY           3.5
KENDALL     WALLY           2.8
MORALES     ROBERTO         2.5
NORBERT     BOB             2.7
PILGRIM     WILLIAM         3.8
WELLS       HOMER           3

4 个答案:

答案 0 :(得分:1)

如果要按姓氏排序,那么它应该是order by中的第一个键:

order by stdlastname, stdfirstname, stdgpa desc

答案 1 :(得分:0)

尝试如下

  SELECT s.STDLASTNAME, s.STDFIRSTNAME, s.STDGPA
 FROM Student s
    ORDER BY 
    s.STDLASTNAME
    s.STDFIRSTNAME, s.STDGPA 

答案 2 :(得分:0)

这是你写的:

ORDER BY 
    s.STDGPA DESC,      --> (A)
    s.STDLASTNAME,      --> (B)
    s.STDFIRSTNAME;     --> (C)

这意味着:

  • 首先,按s.stdgpa列中的值以降序(A)对结果进行排序。
  • 如果事实证明两行(或更多行)共享相同的s.stdgpa值(在您的示例中没有一个行),那么请按s.stdlastname的升序(B)对这些行进行排序< / li>
  • 如果两行(或更多行)共享相同的s.stdlastname值(DODGEKENDALL就是这种情况),则将这些行按s.stdfirstname进行升序排列订单(C)(因此,对于DODGE,MARIAH首先,TESS其次)

显然,您想要按姓氏,名字然后(可能)STDGPA(按降序排列)对结果进行排序,因此上面的人已经说过了:

ORDER BY 
    s.STDLASTNAME,
    s.STDFIRSTNAME,
    s.STDGPA DESC;

答案 3 :(得分:0)

您可以尝试

(?:^|\s+)((?:(?!:\/\/)[a-zA-Z0-9_:?' ])*)(?=\s|$)

ORDER BY s.STDLASTNAME, s.STDFIRSTNAME

以获得所需的结果。