mysql order by null last_order by 语句出现null的情况
时间: 2023-08-09 18:05:35 浏览: 147
当使用 `ORDER BY` 语句进行排序时,如果某一列中存在 `NULL` 值,那么这些 `NULL` 值默认会被排在结果集的最前面。但有时候我们需要把 `NULL` 值排在最后面,这时可以使用以下两种方式:
1. 使用 `DESC` 关键字对该列进行倒序排序,这样 `NULL` 值就会被排在最后面。例如:
```sql
SELECT * FROM my_table ORDER BY my_column DESC;
```
2. 使用 `ORDER BY` 和 `CASE` 语句结合,对包含 `NULL` 的列进行特殊处理。例如:
```sql
SELECT * FROM my_table ORDER BY CASE WHEN my_column IS NULL THEN 1 ELSE 0 END, my_column;
```
上述语句中,首先对 `my_column` 列进行 `CASE` 语句判断,如果该列为 `NULL`,则返回值为 `1`,否则为 `0`。然后按照返回值进行排序,即先排 `0`,再排 `1`,最后再按照 `my_column` 排序。这样就可以将 `NULL` 值排在最后面了。
相关问题
帐号表结构如下: CREATE TABLE `t_account` ( `account_id` int(10) unsigned NOT NULL auto_increment COMMENT '所属帐号id', `account_name` varchar(50) NOT NULL COMMENT '帐号名', `password` varchar(16) NOT NULL COMMENT '密码', `last_login_time` timestamp NOT NULL default '1979-01-01 00:00:00' COMMENT '最后登录时间', `point` int(10) unsigned NOT NULL default '0' COMMENT '积分', PRIMARY KEY USING BTREE (`account_id`), ) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8; CREATE TABLE `t_account_nickname` ( `account_id` int(10) unsigned NOT NULL COMMENT '所属帐号id', `account_nickname `varchar(50) NOT NULL COMMENT'昵称', PRIMARY KEY USING BTREE (`account_id`), ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 请写出SQL语句(温馨提示:列点作答,字体端正,代码细节与规范) 1.查询最近1000个登录的帐号(mysql) 2.查询如下结果:第一列帐号ID,第二列帐号名,第三列昵称,第四列积分 3.对帐号名里包含rock的帐号,积分修改为0 4.查询出重复的昵称
1. 查询最近1000个登录的帐号(mysql)
```
SELECT account_id, account_name, last_login_time, point
FROM t_account
ORDER BY last_login_time DESC
LIMIT 1000;
```
2. 查询如下结果:第一列帐号ID,第二列帐号名,第三列昵称,第四列积分
```
SELECT t1.account_id, t1.account_name, t2.account_nickname, t1.point
FROM t_account AS t1
LEFT JOIN t_account_nickname AS t2 ON t1.account_id = t2.account_id;
```
3. 对帐号名里包含rock的帐号,积分修改为0
```
UPDATE t_account
SET point = 0
WHERE account_name LIKE '%rock%';
```
4. 查询出重复的昵称
```
SELECT account_nickname, COUNT(*) AS num
FROM t_account_nickname
GROUP BY account_nickname
HAVING num > 1;
```
mysql order by实现
MySQL中的`ORDER BY`语句用于对查询结果按照指定的列进行排序。基本语法如下:
```sql
SELECT column1, column2, ...
FROM table_name
ORDER BY column_name [ASC|DESC] [NULLS [FIRST|LAST]];
```
- `column_name`: 要排序的列名。可以是表中的单个列或多列。
- `ASC` (默认): 按升序排列,即从小到大。
- `DESC`: 按降序排列,即从大到小。
- `NULLS FIRST/LAST`: 对于NULL值,你可以选择它们排在最前面(FIRST)还是最后面(LAST)。默认情况下,NULL值可能会随机分布。
例如,如果你想按照用户ID的升序获取所有记录,你可以这样写:
```sql
SELECT * FROM users ORDER BY user_id ASC;
```
如果想按照用户名降序并且NULL值排在最后,可以这样:
```sql
SELECT * FROM users ORDER BY username DESC NULLS LAST;
```
阅读全文