Учитывая данные родителей / рекламодателей, как я могу получить список родителей, где ВСЕ рекламодатели соответствуют определенному условию? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть таблица, содержащая parent_ids, advertiser_ids и числовые значения.Я хочу написать запрос, который дает мне родительские идентификаторы, где у всех рекламодателей под этим родителем числовое значение больше 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

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Несколько исправлений из ответа другого пользователя:

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;
0 голосов
/ 12 апреля 2019

Я думаю, вам просто нужно выражение CASE, например:

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