我有一个包含parent_ids,advertiser_ids和数值的表。我想编写一个查询,为我提供父ID,其中父母下的所有广告客户的数字值都大于90。
我正在努力以简化的方式做到这一点。我一直在尝试各种各样的查询,但我担心我的答案会丢失一些输出值(仍在测试):
SELECT parent
FROM tbl_a
GROUP BY 1
HAVING sum(case when num_dark_days BETWEEN 90 AND 120
then 1 else 0 end
) = count(advertiser_id)
tbl_a:
parent advertiser num_dark_days
A 1 5
A 2 50
A 3 40
A 4 90
A 5 130
B 6 95
B 7 99
B 8 200
B 9 102
C 10 89
D 11 96
我想找回一些看起来像这样的东西:
parent full_dark
A no
B yes
C no
D yes
(在表之间使用这种'假装'的逻辑)
parent num_dark_advertisers total_advertiser_per_parent
A 2 5
B 4 4
C 0 1
D 1 1
我想你只需要一个CASE
表达式,例如:
SELECT parent,
(CASE WHEN COUNT(*) FILTER (num_dark_days >= 90)
THEN 'yes' ELSE 'no'
END)
FROM tbl_a
GROUP BY parent;
其他用户的答案几乎没有更正:
SELECT parent,
(CASE WHEN COUNT
(CASE
WHEN num_dark_days >= 90
THEN 1
ELSE 0
END) = COUNT(advertiser_id)
THEN 'yes' ELSE 'no'
END) AS 'full_dark'
FROM tbl_a
GROUP BY parent;