mysql 把空值放到最后面在对非空值排序
时间: 2023-07-25 17:17:47 浏览: 59
可以使用 MySQL 的 `ORDER BY` 子句来对非空值进行排序,并将空值放到最后面。具体的做法是在 `ORDER BY` 子句中使用 `IS NULL` 和 `DESC` 关键字,如下所示:
```
SELECT *
FROM my_table
ORDER BY my_column IS NULL, my_column DESC;
```
这将首先按照 `my_column` 是否为 NULL 进行升序排序,即将 NULL 值放到最后面;然后再按照 `my_column` 的值进行降序排序,即将非空值按照降序排列。
相关问题
MYSQL查询非空值
如果要查询某个字段非空的记录,可以使用 IS NOT NULL 运算符。例如,如果要查询名字字段非空的记录,可以使用以下 SQL 语句:
```
SELECT * FROM table_name WHERE name IS NOT NULL;
```
其中,table_name 是表名,name 是字段名。这条 SQL 语句会返回所有名字字段非空的记录。
mysql实现多个null值有上面最后一个非空值填充
可以使用MySQL中的IFNULL函数和子查询来实现多个NULL值填充最后一个非空值的需求。
假设有一个表格,其中有一个列是需要填充的列,名为`col_to_fill`,另一个列是用于排序的列,名为`sort_col`。则可以采用如下的SQL语句:
```
UPDATE table_name
SET col_to_fill = (
SELECT IFNULL(t1.col_to_fill, t2.col_to_fill)
FROM (
SELECT col_to_fill
FROM table_name
WHERE col_to_fill IS NOT NULL
ORDER BY sort_col DESC
LIMIT 1
) t1
JOIN (
SELECT col_to_fill
FROM table_name
WHERE col_to_fill IS NOT NULL
ORDER BY sort_col DESC
LIMIT 1
) t2
)
WHERE col_to_fill IS NULL;
```
解释一下这个SQL语句的含义:
首先,使用子查询找到所有非空的`col_to_fill`列,并按照`sort_col`列的倒序进行排序,取出排名第一的记录和排名第二的记录。这里使用了两个相同的子查询,目的是为了避免使用变量,以免出现不可预见的问题。
然后,对于需要填充的列值为NULL的记录,将其填充为排名第一和第二记录中的非空值。如果排名第一记录的`col_to_fill`值不为空,则使用该值填充;否则,使用排名第二记录的`col_to_fill`值填充。
最后,更新需要填充的列的值为填充后的值。
注意,这个SQL语句需要根据实际情况修改表名、列名和排序列等参数。