gpt4 book ai didi

mysql - SQL 排除匹配所有多个条件的行

转载 作者:可可西里 更新时间:2023-11-01 07:17:41 29 4
gpt4 key购买 nike

我目前有一个合并两个表以创建一个新表进行分析的查询。在尝试将其绘制成图表进行演示时得到一些有趣的结果后,我了解到其中一些是从未清理过的虚假数据。我已经能够识别导致问题的数据,为了节省时间,我想在查询中排除它,以便我可以继续进行分析。

这个假数据符合所有这些标准:

  • rate_type = 标准
  • client_net_cleared = 0
  • 程序是空白的(非空)

我在 SELECT 中用 CASE 语句识别了这些,但意识到要使用它我必须做另一个表来查询这个表中的所有内容减去根据 CASE 语句确定为满足上述条件的内容。必须有比这更好的解决方案。

我目前正试图将这些作为 WHERE 语句的一部分排除,但阅读了其他问题主题并发现 WHERE 不太擅长管理多个子条件。

我有什么:

SELECT *
, CASE WHEN tad.rate_type = 'Standard'
AND tad.client_net_cleared = '0'
AND program= '' THEN 1
ELSE '0'
END AS noise

FROM tableau.km_tv_ad_data_import tad
JOIN tableau.km_tv_ad_report ga
ON ga.session_timestamp >= tad.timestamp - INTERVAL '4 minute'
AND ga.session_timestamp <= tad.timestamp + INTERVAL '5 minute'
AND ga.session_timestamp != tad.timestamp

WHERE tad.timestamp >= '2016-09-01'
AND (tad.rate_type != 'Standard'
AND tad.client_net_cleared != '0'
AND tad.program != '')

GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21

示例数据集:

 timestamp           | rate_type | program         | client_net_cleared | noise
---------------------|-----------|-----------------|--------------------|-------
2016-11-01 18:00:00 | Standard | Diving | 50 | 0
2016-12-01 21:00:00 | Holiday | Classic Albums | 100 | 0
2016-11-01 09:00:00 | FireSale | Panorama | 0 | 0
2016-10-01 12:00:00 | Standard | | 0 | 1
2016-12-01 15:00:00 | Holiday | MythBusters | 100 | 0
2016-10-01 13:00:00 | FireSale | House | 200 | 0

我需要什么:

排除符合所有三个条件的行:rate_type = Standard,client_net_cleared = 0,program is blank(not Null)。

最佳答案

正确的标准是

AND NOT (tad.rate_type = 'Standard'
AND tad.client_net_cleared = '0'
AND tad.program = '')

通过 deMorgan's Law ,这相当于:

AND (tad.rate_type != 'Standard'
OR tad.client_net_cleared != '0'
OR tad.program != '')

这类似于您的查询,但请注意它使用的是 OR,而不是 AND

关于mysql - SQL 排除匹配所有多个条件的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41513239/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com