Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

ORDER BY по INTEGER, но представить, что отрицательные числа больше положительных

#sql #sqlite


Здравствуйте! Как составить такой запрос, чтобы сначала шли положительные числа по
возрастанию, а потом все отрицательные? (В моей таблице только -1, другие отрицательные
числа не нужны)

Например, для ряда 4, 3, 5, -1, 8, 2, -1 ORDER BY по столбцу с числами выведет строки,
упорядочив их таким образом: -1, -1, 2, 3, 4, 5, 8, а хотелось бы 2, 3, 4, 5, 8, -1,
-1, это возможно?
    


Ответы

Ответ 1



select id from table order by case when id>0 then 0 else 1 end, id

Ответ 2



Громоздкий вариант: select /**/ from tablename where num >= 0 order by num union all select /**/ from tablename where num = -1 Минус - громоздко. Плюс - намерение наглядно и не надо сомневаться, что же хотел сделать автор. Для sqlite, наверное, не столь актуально, но так сортировка может работать по индексу. Компактно: select /**/ from tablename order by (num = -1) /*возможно, desc, вечно путаю*/, num Т.е. сначала сортируются по признаку, отрицательное ли число, зачем в каждой группе строки сортируются по num уже независимо.

Комментариев нет:

Отправить комментарий