Oracle ORDER BY с несколькими столбцами не работает - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь использовать оператор 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 голосов
/ 02 февраля 2019

Вы можете попробовать либо

ORDER BY s.STDLASTNAME, s.STDFIRSTNAME

, либо

ORDER BY s.STDLASTNAME, s.STDGPA DESC

, чтобы получить желаемый результат.

0 голосов
/ 02 февраля 2019

попробуйте, как показано ниже

  SELECT s.STDLASTNAME, s.STDFIRSTNAME, s.STDGPA
 FROM Student s
    ORDER BY 
    s.STDLASTNAME
    s.STDFIRSTNAME, s.STDGPA 
0 голосов
/ 02 февраля 2019

Это то, что вы написали:

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

Это значит:

  • Сначала отсортируйте результат по значениям в столбце s.stdgpa в порядке убывания (A).
  • Если окажется, что две (или более) строки имеют одинаковое значение s.stdgpa (ни одна из них не имеет в вашем примере), то сортируйте эти строки по s.stdlastname в порядке возрастания (B)
  • если две (или более) строки имеют одно и то же значение s.stdlastname (это имеет место с DODGE и KENDALL), то сортируйте эти строки по s.stdfirstname в порядке возрастания (C) (поэтому дляDODGEs, MARIAH на первом месте, TESS на следующем)

Очевидно, вы хотите отсортировать результат по фамилии, затем по имени, затем (вероятно) STDGPA (в порядке убывания), так чтобыть тем, что люди выше сказали:

ORDER BY 
    s.STDLASTNAME,
    s.STDFIRSTNAME,
    s.STDGPA DESC;
0 голосов
/ 02 февраля 2019

Если вы хотите сделать заказ по фамилии, то это должен быть первый ключ в order by:

order by stdlastname, stdfirstname, stdgpa desc
...