MySQL Lead函数返回NULL问题:期望结果与实际不符
问题原因
你的SQL语句执行顺序导致了这个问题:WHERE子句会先于窗口函数执行。当你先筛选出Name='French'的行后,窗口函数Lead()只能在这单独一行的数据集里计算“下一行”,自然没有后续行,返回NULL。
解决方案
需要先计算窗口函数得到所有行的next值,再筛选目标行。可以用子查询或CTE实现:
方法1:子查询
SELECT id, Name, `next` FROM ( SELECT id, Name, Lead(Name) OVER (ORDER BY id) AS `next` FROM MyTable ) AS sub_query WHERE sub_query.Name = 'French';
方法2:CTE(MySQL 8.0及以上版本支持)
WITH LanguageWithNext AS ( SELECT id, Name, Lead(Name) OVER (ORDER BY id) AS `next` FROM MyTable ) SELECT id, Name, `next` FROM LanguageWithNext WHERE Name = 'French';
执行以上任意语句后,就能得到期望结果:
| id | Name | next |
|---|---|---|
| 2 | French | German |
内容的提问来源于stack exchange,提问作者Cymro
相关产品推荐
相关产品推荐

