КАК ОБРАТИТЬСЯ ЗА НАБОРОМ ЭЛЕМЕНТОВ В SQL - PullRequest
0 голосов
/ 06 мая 2018

скажем, у меня есть column1, который был сформирован многими объектами (в массиве json). Мне нужно что-то подобное сделать здесь: https://community.modeanalytics.com/sql/tutorial/sql-pivot-table/ Так что мне нужно, чтобы над набором элементов тип события мог быть: ('Городской', 'Городской', 'Сельский') ... тогда, когда я обращаюсь к 'Городскому', это выдает следующую ошибку:

ОШИБКА: аргумент CASE / WHEN не должен возвращать набор.

В конце мне нужно посчитать количество происходящих событий, но иногда у меня есть 2 события в наборе, поэтому он не может дать логическое значение ... я должен каким-либо образом выполнять подзапрос? Большое спасибо заранее!

select * from 
    (select jsonb_array_elements(event_all)->>'roadEnv' as road_env,
           SUM(CASE WHEN (jsonb_array_elements(event_all)->>'Type') = 'Urban' THEN event_counts ELSE NULL END) AS U,
           --SUM(CASE WHEN jsonb_array_elements(event_all)->>'Type' = 'Urban' THEN event_counts ELSE NULL END) AS R,
           --SUM(CASE WHEN jsonb_array_elements(event_all)->>'Type' = 'Urban' THEN event_counts ELSE NULL END) AS M,
           COUNT(1)::real as event_counts
    from
      (SELECT  (s.fields->'externalEvents') as event_all
       FROM    addon_session s
       WHERE <filter> and jsonb_typeof(s.fields->'externalEvents')='array') as data 
GROUP BY 1, 2 ) as data 
where road_env is not null and "Events" <> 'AAA'

--- WE NEED TO COUNT OR SUM THEM I GUESS... HOW? COUNT(CASE WHEN Type = 'Urban' THEN 'URBAN' END as 'u')

1 Ответ

0 голосов
/ 06 мая 2018

думаю заменить

(jsonb_array_elements(event_all)->>'Type') = 'Urban'

с

'Urban' = ANY (SELECT jsonb_array_elements(event_all)->>'Type')

это то, что вы хотите. (То есть, если хотя бы один Type должен быть 'Urban', но не все. Или

'Urban' = ALL (SELECT jsonb_array_elements(event_all)->>'Type')

если все Type должны быть 'Urban')

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