社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

mysql对空的默认排序方式[duplicate]

user3819259 • 5 年前 • 1761 次点击  

目前我正在做一个非常基本的秩序在我的声明。

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

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

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

是否有方法实现以下顺序:

1, 2, 3, 4, NULL, NULL, NULL.
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43264
 
1761 次点击  
文章 [ 10 ]  |  最新文章 5 年前
Brandon prb
Reply   •   1 楼
Brandon prb    13 年前

你为什么不最后按空点?

SELECT * 
FROM tablename
WHERE visible = 1 
ORDER BY position ASC NULLS LAST, id DESC 
Danny Beckett
Reply   •   2 楼
Danny Beckett    8 年前

为了 DATE 可以使用的列:


最后的空值:

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

Blanks最后:

ORDER BY IF(`myDate` = '', '9999-12-31', `myDate`) ASC
YasirPoongadan
Reply   •   3 楼
YasirPoongadan    7 年前
SELECT * FROM tablename WHERE visible=1 ORDER BY CASE WHEN `position` = 0 THEN 'a' END , position ASC
Langdon
Reply   •   4 楼
Langdon    15 年前

您可以用不同的值交换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
Seth
Reply   •   5 楼
Seth    15 年前

你可以 coalesce 你的零分 ORDER BY 声明:

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

如果你想让空值在底部排序,请尝试 coalesce(position, 100000) . (使第二个数字比所有其他数字都大 position 在数据库中。)

Misa Lazovic Rachit Patel
Reply   •   6 楼
Misa Lazovic Rachit Patel    9 年前

尝试使用此查询:

SELECT * FROM tablename
WHERE visible=1 
ORDER BY 
CASE WHEN position IS NULL THEN 1 ELSE 0 END ASC,id DESC
sumeet
Reply   •   7 楼
sumeet    8 年前

空末

SELECT * FROM table_name ORDER BY id IS NULL, id ASC
DrewM
Reply   •   8 楼
DrewM    15 年前

有点像

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

将999999999替换为字段的最大值

d-_-b
Reply   •   9 楼
d-_-b    14 年前

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

SELECT * FROM table ORDER BY ISNULL(field), field ASC;
user1052645
Reply   •   10 楼
user1052645    13 年前

mysql有一个未记录的语法来对空值进行最后排序。在列名前放置减号(-),并将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-order_by