You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 05:07:06