Using Qubole
I have
Table A (columns in json parsed…)
ID Recommendation Decision 1 GOOD GOOD 2 BAD BAD 2 GOOD BAD 3 GOOD BAD 4 BAD GOOD 4 GOOD BAD
I need to Select only IDs which have Recommendation GOOD but Decision BAD. Therefore output should be 3.
I tried :
SELECT a.ID FROM ( select json_parsed['ID'] as ID ,json_parsed["Decision"] as Decision ,json_parsed["Recommendation"] as Recommendation from A where create_date >= '2020-11-18') a Left JOin (select json_parsed['ID'] as ID ,json_parsed["Decision"] as Decision ,json_parsed["Recommendation"] as Recommendation from A where create_date >= '2020-11-18') as b on a.ID = b.ID and b.Recommendation = "GOOD" Where b.Recommendation is NULL
Advertisement
Answer
Use analytic functions.
Demo:
with your_table as (--use your table instead of this sample
select stack(6,
1,'GOOD','GOOD',
2,'BAD','BAD' ,
2,'GOOD','BAD' ,
3,'GOOD','BAD' ,
4,'BAD','GOOD' ,
4,'GOOD','BAD') as (ID,Recommendation,Decision)
)
select ID,Recommendation,Decision
from
(
select d.*,
count(*) over(partition by id) as cnt,
count(case when Recommendation = 'GOOD' then 1 end) over(partition by id) cnt_Recommendation_good,
count(case when Decision = 'BAD' then 1 end) over(partition by id) cnt_Decision_BAD
from
your_table d
) s
where cnt_Recommendation_good=cnt
and cnt_Decision_BAD = cnt
Result:
id recommendation decision 3 GOOD BAD