Split_part не дает полных данных в запросе с красным смещением sql - PullRequest
0 голосов
/ 09 июля 2020

у меня есть таблица с данными ниже:

account_id app_name.   triggered_signatures
aaaa        bbbb       111,222,333
aaaa        bbbb       111,222,444
yyyy        xxxx       111,222,444
yyyy        xxxx       111,222,555

ожидаемый результат:

account_id app_name.   triggered_signatures cnt
aaaa        bbbb       111                   2
aaaa        bbbb       222                   2
aaaa        bbbb       333                   1
aaaa        bbbb       444                   1
yyyy        xxxx       111                   2
yyyy        xxxx       222                   2
yyyy        xxxx       444                   1
yyyy        xxxx       555                   1

то, что я пробовал:

SELECT b.account_id, 
           b.app_name, 
           Split_part(triggered_signatures, ',', 1) as "triggered_signatures",   
           Count(DISTINCT b.event_id) AS cnt 
    FROM   "public"."bus_request" b 
    WHERE  b.date > Getdate() - 2 and b.date < Getdate() - 1
    gROUP  BY b.account_id, 
              b.app_name, 
              triggered_signatures

это дает мне только первая строка в списке, а не весь список, когда у меня есть, например, triggered_signatures = [a, b, c, d], я получаю только a. как получить подписи целиком.

1 Ответ

0 голосов
/ 09 июля 2020

Если вам известно максимальное количество значений, вы можете:

select account_id, app_name, triggered_signature, 
from ((select b.account_id, b.app_name, b.event_id,
              split_part(triggered_signatures, ',', 1) as triggered_signature
       from "public"."bus_request" b 
       where b.date > Getdate() - 2 and b.date < Getdate() - 1
      ) union all
      (select b.account_id, b.app_name, b.event_id,
              split_part(triggered_signatures, ',', 2) as triggered_signature
       from "public"."bus_request" b 
       where b.date > Getdate() - 2 and b.date < Getdate() - 1
      ) union all
      (select b.account_id, b.app_name, b.event_id,
              split_part(triggered_signatures, ',', 3) as triggered_signature
       from "public"."bus_request" b 
       where b.date > Getdate() - 2 and b.date < Getdate() - 1
      )
     ) b
where triggered_signature is not null
group by b.account_id, b.app_name, b.triggered_signature;

Добавить дополнительные union all операторы, если вам нужно для всех значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...