SQL使用ORDER BY排序后查询结果列全为NULL值问题排查
问题原因
- 你当前的查询不符合题目输出要求:SELECT子句返回了
name、birth两列,题目要求仅单列展示人员姓名 - 加
ORDER BY birth后看到全为NULL的结果是排序规则导致:绝大多数SQL引擎默认NULL值排序优先级高于非NULL值,所有无出生年份的人员会被排在结果最前,你看到的只是结果集的前半部分,滚动后即可看到有出生年份的正常人员数据。
正确SQL写法
要满足题目要求,同时优化排序体验,可以使用以下查询:
SELECT DISTINCT name FROM people WHERE id IN ( SELECT person_id FROM stars WHERE movie_id IN ( SELECT id FROM movies WHERE year = 2004 ) ) ORDER BY birth NULLS LAST;
如果你的SQL引擎不支持NULLS LAST语法(比如旧版本SQLite),可以换用以下写法:
SELECT DISTINCT name FROM people WHERE id IN ( SELECT person_id FROM stars WHERE movie_id IN ( SELECT id FROM movies WHERE year = 2004 ) ) ORDER BY CASE WHEN birth IS NULL THEN 1 ELSE 0 END, birth;
说明
- 只保留
SELECT DISTINCT name,符合输出仅单列姓名的要求 - 调整排序规则后,有出生年份的人员会按年份升序排在前面,无出生年份的人员统一排在后面,符合题目排序要求
- 保留
DISTINCT保证同一名演员多次出演2004年电影时仅出现一次
内容的提问来源于stack exchange,提问作者F. Zer
相关产品推荐
相关产品推荐

