根据父母/广告客户数据,如何获取所有广告客户满足特定条件的父母列表?

问题描述 投票:0回答:2

我有一个包含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
sql postgresql group-by case having
2个回答
0
投票

我想你只需要一个CASE表达式,例如:

SELECT parent,
       (CASE WHEN COUNT(*) FILTER (num_dark_days >= 90)
             THEN 'yes' ELSE 'no'
        END)
FROM tbl_a
GROUP BY parent;

0
投票

其他用户的答案几乎没有更正:

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;
© www.soinside.com 2019 - 2024. All rights reserved.