MySQL获取首个非空frequency记录并按length升序排序的实现
需求说明
从dataset表中筛选出word包含"aeto"且length≥3的记录,并按以下规则获取第一条记录:
- 优先取
frequency不为空的记录中,按length升序排序后的第一条 - 若没有
frequency非空的记录,则取所有符合筛选条件的记录中按length升序排序后的第一条
尝试过的SQL语句
语句1
select word, length, frequency from `dataset` where `word` LIKE '%aeto%' and `length` >= 3 ORDER BY length ASC,frequency desc;
语句2
select word, length, frequency from `dataset` where `word` LIKE '%aeto%' and `length` >= 3 ORDER BY CASE WHEN frequency IS NULL THEN length ELSE frequency END , length asc, `frequency` desc
初步解决方案思路
- 先执行查询获取
frequency非空且按length升序排序的记录;若没有符合条件的结果,则执行第一条SQL并取第一条记录
预期结果
- 基于样本数据,最终结果应为
PHAETON - 若移除
PHAETON和PRAETORIAN(二者的frequency均非空),则最终结果应为PRAETOR
表结构与样本数据说明
dataset表包含三个字段:
word:字符串类型,存储单词length:整数类型,存储单词长度frequency:整数类型,存储出现频次,允许为空
样本数据中符合筛选条件的记录包括:PHAETON(length=7,frequency=10)、PRAETORIAN(length=9,frequency=5)、PRAETOR(length=7,frequency=null)等。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

