题解 | 给出employees表中排名为奇数行的first_name
给出employees表中排名为奇数行的first_name
https://www.nowcoder.com/practice/e3cf1171f6cc426bac85fd4ffa786594
SELECT first_name
FROM (
SELECT
emp_no, -- 保留原表的顺序标识(主键),关键!
first_name,
ROW_NUMBER() OVER(ORDER BY first_name ASC) AS r_num -- 按 first_name 升序标记行号
FROM employees
) AS t
WHERE t.r_num % 2 = 1 -- 筛选升序后的奇数行
ORDER BY t.emp_no; -- 按主键排序,还原原表顺序
原表的 “顺序” 本质依赖「唯一标识字段」(如主键 emp_no)—— 数据库的 “默认顺序”(无 ORDER BY 时)是不确定的,只有通过主键 / 自增字段才能稳定还原原始顺序。
查看16道真题和解析