Флаг NULLS LAST в Denodo, MemSQL, Spark, VectorWise и XtremeData
Я делаю псевдо-ORM для личного проекта и собираю список проверок совместимости для более чем 20 различных диалектов SQL.
В настоящее время я изучаю, поддерживает ли диалект NULLS LAST
флаг, т.е. при сортировке таблицы, в качестве последнего элемента 1, 2, 3, 4, null
вместо null, 1, 2, 3, 4
,
У меня есть результаты для таких языков, как DashDB/MySQL/MSSQL и т. Д. (Да - они предлагают NULL LAST
) Однако на следующих диалектах мне не удалось найти нулевую-последнюю-способность:
Denodo
MemSQL
искра
VectorWise
XtremeData
Простого "да" или "нет" будет достаточно в вашем ответе, однако, если вы могли бы также записать запрос о том, как выполнить NULL LAST
операция, это тоже было бы здорово!
1 ответ
Я проверил на MemSQL и afaik NULLS LAST
синтаксис не поддерживается. Тем не менее, вы можете достичь этого, сделав что-то вроде этого:
SELECT * FROM foo ORDER BY IFNULL(bar, MAGIC_VALUE) ASC
Измените MAGIC_VALUE, чтобы он сортировал последний / первый в зависимости от данных в столбце. Если у вас все в порядке с перфом, вы можете изменить значение так, чтобы, если оно не было равно нулю, значение всегда начиналось с префикса, который сортирует высоко, а если оно равно нулю, то значение сортируется ниже, чем префикс.
То же самое можно использовать для реализации NULL FIRST.