排除影响特定值的用户 ID

Posted

技术标签:

【中文标题】排除影响特定值的用户 ID【英文标题】:Exclude User IDs which have ineracted which specific values 【发布时间】:2017-10-30 09:41:37 【问题描述】:

如果用户与特定广告系列(在本例中为 Campaign_ID 4)交互,我需要排除用户 ID。

User_ID | Campaign_ID| Value1| Value 2, Value 3, etc.
--------|------------------------------------       
|  1    | Campaign_1 | 1     |               |
|  1    | Campaign_4 | 1     |               |
|  2    | Campaign_1 | 1     |               |
|  3    | Campaign_1 | 1     |               | 
|  3    | Campaign_2 | 1     |               |
|  3    | Campaign_3 | 1     |               | 
|  4    | Campaign_1 | 1     |               |
|  4    | Campaign_4 | 1     |               |
|  5    | Campaign_3 | 1     |               |
---------------------------------------------

我已尝试以下查询以排除所有以某种方式与 Campaign_ID 4 交互的 User_ID:

SELECT DISTINCT *
FROM Report_1
WHERE Campaign_ID IN ("1", "2", "3")
  AND User_ID NOT IN (SELECT User_ID FROM Report_1 WHERE Campaign_ID IN ("4"))

但是,查询只删除了campaign_ID为4的行:

User_ID | Campaign_ID| Value1| Value 2, Value 3, etc.
--------|------------------------------------       
|  1    | Campaign_1 | 1     |               |
|  2    | Campaign_1 | 1     |               |
|  3    | Campaign_1 | 1     |               | 
|  3    | Campaign_2 | 1     |               |
|  3    | Campaign_3 | 1     |               | 
|  4    | Campaign_1 | 1     |               |
|  5    | Campaign_3 | 1     |               |
----------------------------------------------

我想看到的是,所有包含与 Campaign_ID 4 交互的 User_ID 的行都消失了(在本例中为 User_ID 1 和 4)。

User_ID | Campaign_ID| Value1| Value 2, Value 3, etc.
--------|------------------------------------       
|  2    | Campaign_1 | 1     |               |
|  3    | Campaign_1 | 1     |               | 
|  3    | Campaign_2 | 1     |               |
|  3    | Campaign_3 | 1     |               | 
|  5    | Campaign_3 | 1     |               |
---------------------------------------------

有没有办法设置一个查询来做到这一点?

谢谢!

@编辑:我在表中添加了另一列(实际表包含 30 个不同的列)

【问题讨论】:

我已经尝试过您的 SQL (Fiddle),它返回了您期望的结果。你能edit你的问题更好地展示你的问题吗? 您的 Campaign_ID 都不是 1、2、3 或 4。您根本不应该通过该查询获得任何行。 您的查询是无效的标准 SQL。您使用的是哪个DBMS 产品? 我将 BigQuery 与标准 SQL 方言一起使用。 【参考方案1】:

如果您的 compaign_id 列的文本有 Campaign_1 表示 compaign_id 1 和 Campaign_2 表示 compaign_id 2 等,那么下面的查询将满足您的要求

SELECT DISTINCT *
FROM Report_1
WHERE User_ID NOT IN 
(SELECT User_ID FROM Report_1 WHERE Campaign_ID = 'Campaign_4');

【讨论】:

以上是关于排除影响特定值的用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

排除 Qubole 中具有特定值的记录

获取firebase android中特定值的推送ID

jQuery - 从选择器中排除具有特定值的输入

SQL 选择具有特定值的不同 ID

在管理站点中排除具有特定值的多对多

如何从 Spring Security 管理中排除特定资源并使未登录的用户也可以访问它?