Несколько ЗАКАЗАТЬ ПО - PullRequest
       40

Несколько ЗАКАЗАТЬ ПО

3 голосов
/ 30 апреля 2020

enter image description here

Я полностью потерян в клаузуле OrderBy.

Мне нужен этот результат после заказа: ID: 8, 5, 2, 1, 4, 6, 7, 3

Эти правила должны применяться в следующем порядке:

  • top3 = 1
  • top2 = 1
  • top1 = 1
  • По заказу AS C, но заказу "NULL" или от 0 до конца строки

Есть ли возможность сделать этот заказ?

Спасибо всем!

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

Я бы перевел ваше требование как:

order by
    top3 desc,
    top2 desc,
    top1 desc,
    nullif(`order`, 0) nulls last

Последние критерии сокращаются по возрастанию order, сохраняя значения null s и 0 последними.

Обратите внимание что order является зарезервированным словом во всех диалектах SQL, поэтому не очень хороший выбор для имени столбца.

0 голосов
/ 30 апреля 2020

К сожалению, MySQL не поддерживает NULLS LAST / NULLS FIRST. Тем не менее, он легко включается в запрос:

order by top1 desc, top2 desc, top3 desc,
         (ordercol is null or ordercol = 0) asc  -- put these values last
...