目前我在声明中正在做一个非常基本的OrderBy。
SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC
这个问题是'position'的NULL条目被视为0.因此,位置为NULL的所有条目都出现在1,2,3,4之前。例如:
NULL, NULL, NULL, 1, 2, 3, 4
有没有办法实现以下排序:
1, 2, 3, 4, NULL, NULL, NULL.
答案 0 :(得分:513)
MySQL有一个未记录的语法,可以最后对空值进行排序。在列名前面加一个减号( - )并将ASC切换到DESC:
SELECT * FROM tablename WHERE visible=1 ORDER BY -position DESC, id DESC
它基本上是position DESC
的倒数,将NULL值置于最后,但与position ASC
相同。
答案 1 :(得分:281)
我发现这在很大程度上是一个很好的解决方案:
SELECT * FROM table ORDER BY ISNULL(field), field ASC;
答案 2 :(得分:24)
像
这样的东西SELECT * FROM tablename where visible=1 ORDER BY COALESCE(position, 999999999) ASC, id DESC
将999999999替换为该字段的最大值
答案 3 :(得分:11)
NULL LAST
{{1}}
答案 4 :(得分:4)
尝试使用此查询:
SELECT * FROM tablename
WHERE visible=1
ORDER BY
CASE WHEN position IS NULL THEN 1 ELSE 0 END ASC,id DESC
答案 5 :(得分:3)
你可以用不同的值换出NULL实例,先对它们进行排序(如0或-1)或最后(大数字或字母)......
SELECT field1, IF(field2 IS NULL, 9999, field2) as ordered_field2
FROM tablename
WHERE visible = 1
ORDER BY ordered_field2 ASC, id DESC
答案 6 :(得分:3)
您可以在ORDER BY
声明中coalesce您的NULL:
select * from tablename
where <conditions>
order by
coalesce(position, 0) ASC,
id DESC
如果要在底部对NULL进行排序,请尝试coalesce(position, 100000)
。 (使第二个数字大于数据库中的所有其他position
。)
答案 7 :(得分:3)
SELECT * FROM tablename WHERE visible=1 ORDER BY CASE WHEN `position` = 0 THEN 'a' END , position ASC
答案 8 :(得分:2)
对于DATE
列,您可以使用:
NULLS最后:
ORDER BY IFNULL(`myDate`, '9999-12-31') ASC
空白最后:
ORDER BY IF(`myDate` = '', '9999-12-31', `myDate`) ASC
答案 9 :(得分:1)
要获得以下结果:
1, 2, 3, 4, NULL, NULL, NULL.
使用语法,将-(minus sign)
放在字段名称之前,并使用相反的order_type(例如:如果要按ASC顺序进行排序,请使用DESC,或者如果要DESC顺序则使用ASC)
SELECT * FROM tablename WHERE visible=1 ORDER BY -position DESC
答案 10 :(得分:1)
这很好:
let checkMarkPosition = UserDefaults.standard.integer(forKey: "showOnCustomButton")
SELECT * FROM tablename ORDER BY position = 0, position ASC;
答案 11 :(得分:0)
这很简单。您只需要订购两次:
SELECT * FROM table_name
ORDER BY ISNULL(field_name), field_name;
它适用于任何类型,包括 JSON。
答案 12 :(得分:-8)
为什么不通过NULLS LAST订购?
SELECT *
FROM tablename
WHERE visible = 1
ORDER BY position ASC NULLS LAST, id DESC