MySQL 按数字排序,最后为空

标签 mysql sql-order-by

目前我正在我的语句中执行一个非常基本的 OrderBy。

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

这样做的问题是“位置”的 NULL 条目被视为 0。因此,所有位置为 NULL 的条目都会出现在 1、2、3、4 的条目之前。例如:

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

有没有办法实现以下排序:

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

最佳答案

MySQL 有一个未记录的语法来对空值进行最后排序。在列名称前放置一个减号 (-),并将 ASC 切换为 DESC:

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

它本质上与将 NULL 值放在最后的position DESC相反,但在其他方面与position ASC相同。

这里有一个很好的引用http://troels.arvin.dk/db/rdbms#select-order_by

关于MySQL 按数字排序,最后为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53634627/

相关文章:

php - 在第 317 行获取 fatal error : Using $this when not in object context in Stemmer. php

php - 按顺序分组纬度和经度对

mysql - 同一张表上数据库中的多对多关系

sql - 为什么人们在 SQL 中使用 ASC?

php - 按字母顺序排列 mysql-query,为数字给出一个字符串?

mysql - 使用基于唯一 id 列的两个现有表创建一个新表

mysql - 如何从 SQL 快照访问数据

python - 按链式连接关系中的列排序

mysql - 当我尝试根据同一列进行两次排序时,为什么 SQL 不会抛出错误?

MySQL ORDER BY 两个子句(降序和升序)