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

如何用纯MySQL高效统计单行内非空列的数量?

高效统计单行非空列数量的MySQL实现

嘿,完全懂你那种多次查询累加的痛苦——既冗余又低效,其实用一次MySQL查询就能搞定,根本不用写重复的PHP脚本!

核心思路很简单:在单条查询里对每一列做非空判断,把符合条件的列转化为1,不符合的转化为0,最后将这些数值相加,得到的结果就是非空列的总数。

具体实现代码

假设你的表名为your_table,要查询的行id=X,可以用下面的SQL:

SELECT 
  (
    IF(col1 IS NOT NULL AND col1 != '', 1, 0) +
    IF(col2 IS NOT NULL AND col2 != '', 1, 0) +
    IF(col3 IS NOT NULL AND col3 != '', 1, 0) +
    IF(col4 IS NOT NULL AND col4 != '', 1, 0) +
    IF(col5 IS NOT NULL AND col5 != '', 1, 0) +
    IF(col6 IS NOT NULL AND col6 != '', 1, 0)
  ) AS non_empty_count
FROM your_table
WHERE id = X;

代码说明

  • 每个IF语句会检查对应列:如果列值不是NULL且不是空字符串,就返回1,否则返回0;
  • 把所有列的判断结果相加,最终得到的non_empty_count就是你要的非空列数量(对应你示例里的结果4);
  • 整个过程只需要一次数据库查询,避免了多次连接、查询的开销,效率提升非常显著。

如果你更喜欢用CASE语句(可读性可能更强一点),也可以写成这样:

SELECT 
  (
    CASE WHEN col1 IS NOT NULL AND col1 != '' THEN 1 ELSE 0 END +
    CASE WHEN col2 IS NOT NULL AND col2 != '' THEN 1 ELSE 0 END +
    CASE WHEN col3 IS NOT NULL AND col3 != '' THEN 1 ELSE 0 END +
    CASE WHEN col4 IS NOT NULL AND col4 != '' THEN 1 ELSE 0 END +
    CASE WHEN col5 IS NOT NULL AND col5 != '' THEN 1 ELSE 0 END +
    CASE WHEN col6 IS NOT NULL AND col6 != '' THEN 1 ELSE 0 END
  ) AS non_empty_count
FROM your_table
WHERE id = X;

两种写法效果完全一致,选你觉得顺手的就行。

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:27:18