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

如何在MySQL非规范化表的多列中统计指定值出现次数

非规范化MySQL表中多列值的出现次数统计

当前查询的不足

  • 原查询仅统计包含'1'的行数:只要某一行的任意一个目标列存在'1',就会被计数1次,完全忽略同一行中'1'出现多次的情况,无法得到所有列里'1'的总出现次数。
  • 存在隐式类型转换风险:如果column 1等列是整数类型,用字符串'1'匹配会触发MySQL的隐式类型转换,可能降低查询性能,甚至出现不符合预期的匹配结果。

统计总出现次数的方法

无需修改表结构的前提下,可以通过SUM()函数结合列值判断来实现:

针对字符串类型列的查询

SELECT 
  SUM(
    (`column 1` = '1') + 
    (`column 2` = '1') + 
    (`column 3` = '1') + 
    (`column 4` = '1')
  ) AS total_occurrences
FROM persons
WHERE person_MyId = '14';

针对整数类型列的查询

如果目标列存储的是整数,直接用数值1匹配,避免类型转换问题:

SELECT 
  SUM(
    (`column 1` = 1) + 
    (`column 2` = 1) + 
    (`column 3` = 1) + 
    (`column 4` = 1)
  ) AS total_occurrences
FROM persons
WHERE person_MyId = '14';

原理说明

MySQL中布尔表达式的计算结果为1(条件成立)或0(条件不成立)。将每个列的匹配结果相加,就能得到单一行中'1'的出现次数;再通过SUM()函数累加所有符合person_MyId='14'的行的结果,最终得到所有目标列中'1'的总出现次数。

内容的提问来源于stack exchange,提问作者d-comet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 08:49:59