如何查询同一列中具有多个模式匹配值的案例

问题描述 投票:0回答:1

例如表:

姓名 地点
约翰·史密斯 纽约1131413431
约翰·史密斯 纽约2222213
马克怀特 波士顿111118174124712
莎拉·菲利普斯 纽约2222123
莎拉·菲利普斯 波士顿2222918

我试图仅查询它们存在于 2 个或更多城市的名称(对于此数据集的情况,它几乎总是最多 2 个城市)。因此,从这张表中,只有 Sarah Philips 应该返回。

我用“like NewYork% 或 like Boston%”运算符编写了一个查询,其中 count(location) > 1。但是这样做也会返回 John Smith,因为 NewYork 字符串有多种变体。城市名称后面的字符长度也是随机的。

sql postgresql
1个回答
0
投票

如果数据始终采用这种形式,意味着位置由字符串后跟一些数字组成,您可以使用

SUBSTRING
进行正则表达式检查,并将其放入
HAVING
子句中:

SELECT
  name
FROM yourtable
GROUP BY
  name
HAVING 
  COUNT (DISTINCT SUBSTRING(Location,'\D+')) > 1;

这将根据要求仅返回出现在不同地点的人员。

看到这个样本小提琴

© www.soinside.com 2019 - 2024. All rights reserved.