用于在列1中选择与第2列中的两个模式之一匹配的值对的SQL查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于在列1中选择与第2列中的两个模式之一匹配的值对的SQL查询相关的知识,希望对你有一定的参考价值。

我的数据如下:

|User ID        |Install Version |
|--------------------------------|
|  Value A      |     Pattern 1  |
|  Value B      |     Pattern 1  |
|  Value A      |     Pattern 2  |
|  Value C      |     Pattern 2  |
|  Value D      |     Pattern 1  |

我想只选择一个或多个条目匹配Pattern 1Pattern 2的用户ID。所以在上面的例子中,我只想选择Value a

基本上,我想比较哪个用户ID已经安装了软件产品的“Lite”和“Full”。例如,由于Value B没有与Pattern 1Pattern 2配对的条目,我不想选择它。

将有许多用户ID条目,但安装的版本很少。我已经玩了很长一段时间了解这个问题,但我仍然遇到了麻烦。

答案

我可以想到两种方式,一种是GROUP_CONCAT,另一种是使用子查询。

SELECT user_id, GROUP_CONCAT(installed_version) as all_patterns
FROM your_table
GROUP BY user_id
HAVING all_patterns REGEXP 'Pattern 1'
AND all_patterns REGEXP 'Pattern 2';

--

SELECT * FROM 
(
SELECT user_id, installed_version FROM your_table
WHERE installed_version LIKE 'Pattern 1'
) as tmp
WHERE installed_version LIKE 'Pattern 2';
另一答案

该表未明确定义,但原则上查询可能类似于:

SELECT user_id
FROM installation
WHERE version = 'version 1'
INTERSECT
SELECT user_id
FROM installation
WHERE version = 'version 2';
另一答案

您可以使用具有模式1和模式2的交叉来获取

SELECT [User ID]
FROM Table
WHERE [Install Version]='Pattern 1'
INTERSECT
SELECT [User ID]
FROM Table
WHERE [Install Version]='Pattern 2';
另一答案

在Postgres,我会去:

SELECT user_id
FROM t
GROUP BY user_id
HAVING COUNT(*) FILTER (WHERE installed_version = 'Pattern 1') > 0 AND
       COUNT(*) FILTER (WHERE installed_version = 'Pattern 2') > 0

以上是关于用于在列1中选择与第2列中的两个模式之一匹配的值对的SQL查询的主要内容,如果未能解决你的问题,请参考以下文章

如何使用模式列表在列中查找字符串并将匹配的模式添加到下一列的同一行

UltraWebGrid:如何在列中使用下拉列表

我想在列中的值中添加“%”单位

在列中的两个值之间重复值

“查询结构与函数结果类型不匹配。返回类型双精度与第 1 列中的预期类型整数不匹配。”?

Excel VBA - 搜索范围和连接的 SQL ADODB 记录集以在列中匹配写入结果集