mysql orderby一个数字,最后为空

lb3vh1jj  于 2021-06-15  发布在  Mysql
关注(0)|答案(12)|浏览(473)

目前,我正在做一个非常基本的orderby在我的发言。

SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC

问题是“position”的空条目被视为0。因此,位置为null的所有条目都出现在位置为1、2、3、4的条目之前。如:

NULL, NULL, NULL, 1, 2, 3, 4

有没有办法实现以下订购:

1, 2, 3, 4, NULL, NULL, NULL.
deikduxw

deikduxw1#

mysql有一个未记录的语法来最后对null进行排序。在列名前放置减号(-),并将asc切换为desc:

SELECT * FROM tablename WHERE visible=1 ORDER BY -position DESC, id DESC

它本质上是 position DESC 将空值放在最后,但在其他方面与 position ASC .
这里有一个很好的参考资料http://troels.arvin.dk/db/rdbms#select-订购人

628mspwn

628mspwn2#

为了一个 DATE 可以使用的列:
最后为空:

ORDER BY IFNULL(`myDate`, '9999-12-31') ASC

最后空格:

ORDER BY IF(`myDate` = '', '9999-12-31', `myDate`) ASC
nr9pn0ug

nr9pn0ug3#

你为什么不最后点空的呢?

SELECT * 
FROM tablename
WHERE visible = 1 
ORDER BY position ASC NULLS LAST, id DESC
vqlkdk9b

vqlkdk9b4#

上次为空

SELECT * FROM table_name ORDER BY id IS NULL, id ASC
mwkjh3gx

mwkjh3gx5#

你可以在 ORDER BY 声明:

select * from tablename
where <conditions>
order by
    coalesce(position, 0) ASC, 
    id DESC

如果希望空值在底部排序,请尝试 coalesce(position, 100000) . (使第二个数大于所有其他数 position 在数据库中。)

oaxa6hgo

oaxa6hgo6#

SELECT * FROM tablename WHERE visible=1 ORDER BY CASE WHEN `position` = 0 THEN 'a' END , position ASC
zzlelutf

zzlelutf7#

您可以用一个不同的值交换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
nszi6y05

nszi6y058#

尝试使用此查询:

SELECT * FROM tablename
WHERE visible=1 
ORDER BY 
CASE WHEN position IS NULL THEN 1 ELSE 0 END ASC,id DESC
hrirmatl

hrirmatl9#

这很有效:

SELECT * FROM tablename ORDER BY position = 0, position ASC;
position
1 
2
3
0
0
wd2eg0qa

wd2eg0qa10#

像这样的

SELECT * FROM tablename where visible=1 ORDER BY COALESCE(position, 999999999) ASC, id DESC

将999999999替换为字段的最大值

ve7v8dk2

ve7v8dk211#

达到以下效果: 1, 2, 3, 4, NULL, NULL, NULL. 使用语法,放置 -(minus sign) 在字段名之前,使用逆序类型(例如:如果要按asc顺序排序,则使用desc;如果要按desc顺序排序,则使用asc) SELECT * FROM tablename WHERE visible=1 ORDER BY -position DESC

bkhjykvo

bkhjykvo12#

我发现这在很大程度上是一个很好的解决方案:

SELECT * FROM table ORDER BY ISNULL(field), field ASC;

相关问题