如何在SQL中统计一行内值不为'nincs'的文本单元格总个数
问题原因
你直接对文本列执行加法运算的逻辑有问题:数据库会默认尝试将文本内容隐式转换为数值后再相加,无法转为数值的"nincs"及其他普通文本都会被识别为0,自然返回结果为0。
解决方法
全数据库通用写法(兼容MySQL、PostgreSQL、SQL Server等所有主流数据库)
通过CASE WHEN对每列做条件判断,符合要求的单元格计为1,不符合计为0,再求和即可得到单行符合要求的单元格总数:
SELECT ( CASE WHEN kap_bar_01 <> 'nincs' THEN 1 ELSE 0 END + CASE WHEN kap_bar_02 <> 'nincs' THEN 1 ELSE 0 END + CASE WHEN kap_bar_03 <> 'nincs' THEN 1 ELSE 0 END + CASE WHEN kap_bar_04 <> 'nincs' THEN 1 ELSE 0 END + CASE WHEN kap_bar_05 <> 'nincs' THEN 1 ELSE 0 END ) AS valid_cell_count FROM mymodell
简化写法(仅适用于MySQL)
MySQL中布尔判断结果会默认转为1(真)/0(假),可以直接简写为:
SELECT (kap_bar_01 <> 'nincs') + (kap_bar_02 <> 'nincs') + (kap_bar_03 <> 'nincs') + (kap_bar_04 <> 'nincs') + (kap_bar_05 <> 'nincs') AS valid_cell_count FROM mymodell
统计全表总符合数
如果需要统计整张表所有行的符合要求的单元格总数量,在外层加SUM聚合即可:
SELECT SUM( CASE WHEN kap_bar_01 <> 'nincs' THEN 1 ELSE 0 END + CASE WHEN kap_bar_02 <> 'nincs' THEN 1 ELSE 0 END + CASE WHEN kap_bar_03 <> 'nincs' THEN 1 ELSE 0 END + CASE WHEN kap_bar_04 <> 'nincs' THEN 1 ELSE 0 END + CASE WHEN kap_bar_05 <> 'nincs' THEN 1 ELSE 0 END ) AS total_valid_count FROM mymodell
内容的提问来源于stack exchange,提问作者RlM
相关产品推荐
相关产品推荐

