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

SQL查询实现:筛选指定列中目标值至少出现指定次数的数据行

解决SQL多列至少N列满足条件的问题

嘿,这个问题其实可以用计数求和的思路来解决,比枚举所有两两组合要简洁得多,尤其适合列数较多的场景。

核心思路

把每一列是否包含目标字符(这里是'h')转换成数值:满足条件记为1,不满足记为0,然后把这些数值相加,只要总和大于等于2,就说明至少有2列符合要求。

通用SQL写法(适用于所有数据库)

这个写法不管你用MySQL、PostgreSQL、SQL Server还是Oracle都能跑:

SELECT *
FROM GreetingsAndFarewell
WHERE 
  (CASE WHEN greeting1 LIKE '%h%' THEN 1 ELSE 0 END) +
  (CASE WHEN greeting2 LIKE '%h%' THEN 1 ELSE 0 END) +
  (CASE WHEN greeting3 LIKE '%h%' THEN 1 ELSE 0 END) >= 2;

简化写法(针对部分数据库)

如果你的数据库支持将布尔值直接转换为整数(比如MySQL、PostgreSQL),可以用更简洁的版本:

-- MySQL / PostgreSQL 适用
SELECT *
FROM GreetingsAndFarewell
WHERE 
  (greeting1 LIKE '%h%') +
  (greeting2 LIKE '%h%') +
  (greeting3 LIKE '%h%') >= 2;

这里数据库会自动把LIKE返回的布尔结果(TRUE/FALSE)转换成1/0,直接相加即可。

为什么这个方法更好?

对比枚举所有两两组合的写法(比如(greeting1 LIKE '%h%' AND greeting2 LIKE '%h%') OR (greeting1 LIKE '%h%' AND greeting3 LIKE '%h%') OR (greeting2 LIKE '%h%' AND greeting3 LIKE '%h%')),计数求和的方式:

  • 代码更简洁,可读性更高
  • 扩展性更强:如果以后需要判断至少3列满足,只需要把>=2改成>=3就行,不用新增一堆条件

用这个语句跑你的样本数据,正好能得到你期望的那3行结果~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:22:57