MySQL 5.7中如何按非空列数量降序排序表数据?
按非空列数量排序MySQL表的实现方案
在MySQL 5.7中,要实现按每行非空列数量从多到少排序,核心思路是计算每行的非空列总数,再以此为依据降序排列。具体实现如下:
1. 核心SQL逻辑
对每一列判断是否非空(需区分NULL和空字符串,可根据业务需求调整),非空则记为1,最后求和得到该行的非空列数,再按这个数值降序排序。
以你提供的Student表为例,SQL语句如下:
SELECT name, age, address, ( IF(name IS NOT NULL AND name != '', 1, 0) + IF(age IS NOT NULL AND age != '', 1, 0) + IF(address IS NOT NULL AND address != '', 1, 0) ) AS non_null_count FROM Student ORDER BY non_null_count DESC;
执行后会得到预期结果:gib(3个非空列)排首位,tan和pur(2个非空列)紧随其后,hal(0个非空列)排在最后。
2. 适配28列的表
你的表有28列,只需把所有列依次加入到求和表达式中即可。比如新增gender列,就添加IF(gender IS NOT NULL AND gender != '', 1, 0) +到括号内。
如果业务中只需要判断NULL(不考虑空字符串),可简化判断条件为IF(列名 IS NOT NULL, 1, 0)。
3. 可选:固定同数量行的顺序
如果希望非空列数量相同的行有固定排序,可在ORDER BY后追加额外排序条件,比如按name升序:
ORDER BY non_null_count DESC, name ASC;
内容的提问来源于stack exchange,提问作者maddy_novice
相关产品推荐
相关产品推荐

