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

SQL Server优化查询:按指定列表值统计内容列的不区分大小写出现次数

最优SQL Server查询语句实现指定值的出现次数统计

针对需求,以下是高效的SQL Server查询方案,可统计目标列表中每个值在myTable.Content列的出现次数(包含计数为0的项),且支持不区分大小写搜索:

基础实现方案

SELECT
    SearchValue,
    COUNT(t.ID) AS OccurrenceCount
FROM (
    -- 定义需要统计的目标值集合
    VALUES 
        ('Hello'),
        ('Hi'),
        ('Yes'),
        ('content')
) AS SearchValues(SearchValue)
LEFT JOIN myTable t
    -- 不区分大小写的子串匹配:统一转为小写后判断包含关系
    ON LOWER(t.Content) LIKE '%' + LOWER(SearchValue) + '%'
GROUP BY SearchValue
ORDER BY SearchValue;

方案说明

  • 构造目标值数据集:通过VALUES子句将给定字符串列表转为独立行数据,确保所有需统计的项都被纳入结果,包括无匹配的项(如示例中的"Yes")。
  • 左连接保留全量值:使用LEFT JOIN关联原表,保证即使原表无匹配记录,目标值也会被保留,对应计数为0。
  • 不区分大小写匹配:通过LOWER()函数将列值和搜索值统一转为小写实现匹配;也可指定不区分大小写的排序规则替代,写法为:
    ON t.Content LIKE '%' + SearchValue + '%' COLLATE SQL_Latin1_General_CP1_CI_AS
    
  • 计数逻辑:COUNT(t.ID)会忽略左连接后无匹配行的NULL值,精准统计每个搜索值的匹配行数。

大数据量优化方案

如果myTable数据量较大,LIKE '%...%'性能会受影响,可通过创建全文索引并使用CONTAINS函数提升匹配效率:

-- 需预先对Content列创建全文索引
SELECT
    SearchValue,
    COUNT(t.ID) AS OccurrenceCount
FROM (
    VALUES 
        ('Hello'),
        ('Hi'),
        ('Yes'),
        ('content')
) AS SearchValues(SearchValue)
LEFT JOIN myTable t
    ON CONTAINS(t.Content, SearchValue)
GROUP BY SearchValue
ORDER BY SearchValue;

注意事项

CONTAINS基于词匹配,若需要精确的子串匹配(如匹配"content"在"testcontent"中的情况),仍需使用LIKE配合大小写转换的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:46:04