是否可以在 sql 中按匹配某些模式的字段进行分组?

Posted

技术标签:

【中文标题】是否可以在 sql 中按匹配某些模式的字段进行分组?【英文标题】:Is it possible in sql to group by fields matching some pattern? 【发布时间】:2010-07-28 10:49:05 【问题描述】:

SQL 中是否可以按LIKE 模式进行分组?我想实现这样的目标:

id|名称
1 |麦克风
2 |鲍勃
3 |账单
4 |爱丽丝

然后进行如下查询:SELECT name from users group by _pattern_ 例如,我想通过匹配模式 'B*'、'*l*' 和 'Mike' 来获取组 会给出输出:

乙* |鲍勃 |账单 *l* |账单 |爱丽丝 迈克|麦克风

【问题讨论】:

【参考方案1】:
Select 'B*' as Mask, Name
from Table
WHERE Name like 'B%'
UNION ALL
Select '*l*' as Mask, Name
from Table
WHERE Name like '%l%'
UNION ALL
Select 'Mike' as Mask, Name
from Table
WHERE Name like 'Mike'

【讨论】:

【参考方案2】:

如果您希望同一条记录根据其匹配的模式多次出现,您应该使用多个带有相关过滤器的SELECT 语句和UNION 一起使用..

【讨论】:

【参考方案3】:

您可以查询集合结构中的模式,然后使用 GROUP BY 或 DISTINCT 来删除重复数据,下面是 MSSQL CTE 的一种方式(临时表/表变量也可以);

with match (pattern) as (
          select 'B%'
    union select '%l%' 
    union select 'Mike' 
)
select
    pattern,
    name
from TABLE, match where TABLE.name like match.pattern
group by pattern, name

==
%l%     Alice
%l%     Bill
B%      Bill
B%      Bob
Mike    Mike    

【讨论】:

以上是关于是否可以在 sql 中按匹配某些模式的字段进行分组?的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL/Impala 中按特定的分钟数对日期时间进行分组

分组值在 SQL (maria DB) 中按时间存储直到零,并与计数一起进行求和

如何在 PL/SQL 中按每天分组?

如何使用 SQL Server 在此查询中按天对结果进行分组?

在 xsl:fo 表中按列行值分组

在mysql中按2字段分组[重复]