在最近的一次數(shù)據(jù)分析中,我通過一段對兩個(gè)表的鏈接查詢配并,返回我需要的數(shù)據(jù)。在使用過程中高镐,我發(fā)現(xiàn)了其中包含了一些臟數(shù)據(jù)荐绝,需要通過一些方法清除它們。我定位了這些數(shù)據(jù)的特點(diǎn)避消,然后把他們加入到查詢的條件中低滩,希望通過查詢腳本的方式,把滿足這些條件的記錄排除岩喷。
這些錯(cuò)誤的數(shù)據(jù)都有以下的特點(diǎn):
- rate_type = Standard
- client_net_cleared = 0
- program is blank (not Null)
我開始的時(shí)候使用的是以下這樣的方式恕沫,然后添加到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
我最后需要的是:
排除同時(shí)滿足下面所有條件的記錄:
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 = '')
這樣就實(shí)現(xiàn)了需要的目標(biāo)婶溯,實(shí)際上這個(gè)問題的重點(diǎn)還是在SQL的基礎(chǔ),真正理解AND和OR的計(jì)算邏輯偷霉。
完畢迄委,希望能幫到你。喜歡請關(guān)注类少、收藏叙身。