MySQL CASE не работает для ORDERY BY, где используются два столбца

0

Я хочу использовать следующий SQL:

SELECT * FROM Data WHERE tid=1 ORDER BY CASE WHEN round=0 THEN date ELSE round, date END ASC

но это не работает из-за round, date бита round, date. Работает хорошо, если я делаю что битную round, например, но не с обоими.

Если round=0 то я хочу, чтобы сортировать по возрастанию по round сначала, а затем по date. Это возможно?

То, что я пытаюсь достичь отсортированный массив строк, которые сортируют на round первое затем date второго. Но если round равен нулю, я просто хочу, чтобы эта строка появлялась между датами, в которые была бы записана эта запись, даже если бы она имела нулевое round значение.

  • 0
    Можете ли вы привести примеры того, как будет выглядеть отсортированный результат? Ваш вопрос не имеет смысла, потому что данная дата может быть практически в любом месте результатов, учитывая, что round может иметь любое значение.
  • 0
    Я на самом деле понял, что слишком усложнил ситуацию, и мне действительно нужно было отсортировать только по дате, потому что в силу правил, в которых я работаю, порядок округления чисел обычно связан с порядком дат. Я решил удалить вопрос, но, тем не менее, нахожу ответы полезными, и они могут быть полезны для других, поэтому я не буду его удалять. Извините за путаницу @GordonLinoff
Теги:

2 ответа

1
Лучший ответ

Можно использовать пару случаев, когда один для каждого столбца

  SELECT * 
  FROM Data 
  WHERE tid=1 
  ORDER BY ( CASE WHEN round= 0  THEN date ELSE round  END) ASC , 
           ( CASE WHEN round= 0  THEN NULL  ELSE date  END) ASC
2

Выражение case возвращает только одно значение. Если сначала нужны строки с round = 0, то вы можете сделать:

ORDER BY (CASE WHEN round = 0 THEN 1 ELSE 2 END),
         round, date

Это можно сократить до:

ORDER BY (round = 0) DESC, round, date

Тем не менее, я не уверен на 100%, что вы действительно хотите.

Если round принимает только два значения, ваш вопрос будет иметь больше смысла. В этом случае вы действительно хотите сначала сортировать по date:

ORDER BY date, round;

Однако это предположение о том, как выглядят ценности данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню