Преобразование нескольких простых запросов в один? - PullRequest
0 голосов
/ 13 сентября 2018

Я новичок в SQL, поэтому все будет объяснено, как и мне 5. Я пытаюсь выяснить, , сколько людей выполнили событие, «нажали, чтобы узнать больше», а затем приступили к его проведению."установить пробный статус" .Я использую Postgres, поэтому есть еще один AND payload->>'status' = true, который я упустил, чтобы упростить его.По сути, мне нужно, чтобы следующие псевдо-запросы превратились в функциональный одиночный запрос.

SELECT DISTINCT booking_id
FROM venue_events
WHERE name = 'clicked learn more'`;

SELECT count(*)
FROM venue_events
WHERE booking = booking_id AND name = 'set trial status' AND payload->>'status' = true;

Как я могу превратить его в один-единственный SQL-запрос, второй, используя booking_ids из первого

Ниже показано, как выглядят данные в таблице.

row layout

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Я думаю, вам нужна группа по имени

SELECT name ,count(*)
FROM venue_events
WHERE   payload->>'status' = true
group by name 
0 голосов
/ 13 сентября 2018

Без просмотра структур таблиц и примеров данных трудно быть полностью уверенным, но если вы хотите получить все подсчеты, которые вы упомянули в комментарии к другому ответу, я думаю, что этот запрос - то, что вам нужно.

SELECT v1.booking_id AS booking_id,
       COUNT(v1.booking_id) AS Clicked_learn_more, 
       COUNT(v2.booking_id) AS Set_trial_status_true,
       COUNT(v3.booking_id) AS Completed_booking
FROM (SELECT DISTINCT booking_id 
      FROM venue_events 
      WHERE name='clicked learn more' AND payload->>'status' = true) v1
LEFT JOIN (SELECT DISTINCT booking_id 
           FROM venue_events 
           WHERE name='set trial status' AND payload->>'status' = true) v2
    ON v2.booking_id = v1.booking_id
LEFT JOIN (SELECT DISTINCT booking_id 
           FROM venue_events 
           WHERE name='completed booking' AND payload->>'status' = true) v3
    ON v3.booking_id = v1.booking_id
GROUP BY v1.booking_id
0 голосов
/ 13 сентября 2018
SELECT count(*)
FROM venue_events
WHERE name = 'set trial status' 
AND booking_id IN
(
    SELECT DISTINCT booking_id
    FROM venue_events
    WHERE name = 'clicked learn more'
)
AND payload->>'status' = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...