首页 > 解决方案 > SQL 计算列值包含字符串的行数

问题描述

我想计算某个列在列值中有子字符串的行数。

这不起作用

select count(column_name like '%substring%') 
from table_name 

示例:我想计算包含“否”的行

column_name
-----------    
noa
noit 
yot

预期结果:2

因为 'no' 是 'noa' 和 'noit' 中的子串。

标签: mysqlsql

解决方案


使用case表达式:

select sum(case when column_name like '%substring%' then 1 else 0 end)
from table_name ;

或者,如果这是您想要的唯一值,请使用过滤和count(*)

select count(*)
from table_name
where column_name like '%substring%';

当查询中有其他列时,第一个更合适。

我应该注意到,SQL 标准有另一种方法来实现这一点,使用filter

select count(*) filter (where column_name like '%substring%')
from table_name ;

但是,大多数数据库不支持这种语法。


推荐阅读