У меня есть таблица данных поиска в приложении авиакомпании. Я хочу написать запрос, который выводит количество посетителей, которые искали только один аэропорт в Нью-Йорке, а не какой-либо другой в Нью-Йорке. Так что по сути определите количество людей, которые ищут один аэропорт, и не пробуют другие аэропорты в Нью-Йорке.
Предположим, что аэропорты Нью-Йорка - это JFK, LGA, EWR и MSY.
Таблица будет выглядеть примерно так:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| visitor_id | searched_to | searched_from | booked|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| 11 | JFK | LCY | N |
| 11 | LGA | LCY | N |
| 11 | EWR | LCY | N |
| 12 | JFK | LCY | N |
| 13 | MSY | LTN | Y |
| 14 | JFK | LTN | N |
| 14 | JFK | LGW | N |
| 14 | EWR | LCY | Y |
| 15 | GOA | MSY | N |
например Посетители 12 и 15 - это те, кого я хотел бы включить в подсчет, если они не расширили свой поиск. например Посетитель 14 - это тот, кого я хотел бы включить в подсчет тех, кто продлил свой поиск.
По сути, мне нужно количество:
Надеюсь, что все имеет смысл? Любая помощь приветствуется!


Попробуйте это для 1-го запроса. Пожалуйста, проверьте, предоставляет ли этот запрос требуемый результат.
SELECT visitor_id, count(*)
FROM tableName t
WHERE search_to IN ('JFK', 'LGA', 'EWR', 'MSY')
AND NOT IN (SELECT visitor_id FROM tableName temp WHERE t.visitor_id = temp.visitor_id AND booked = 'Y' and search_to IN ('JFK', 'LGA', 'EWR', 'MSY'))
GROUP BY visitor_id
HAVING count(*) = 1;
С небольшими изменениями 2-й и 3-й запросы будут готовы к использованию. Попробуйте сами.
Спасибо за ответ, Рахул, это было не совсем то, что я искал
Ниже приведен стандартный SQL BigQuery.
Первый шаг - выяснить, какой посетитель что сделал
#standardSQL
SELECT visitor_id, 'Y' = MAX(booked) booked,
1 < COUNTIF(searched_to IN ('JFK', 'LGA', 'EWR', 'MSY')
OR searched_from IN ('JFK', 'LGA', 'EWR', 'MSY')) extended
FROM `project.dataset.your_table`
GROUP BY visitor_id
если вы попробуете это с фиктивными данными, как показано ниже
WITH `project.dataset.your_table` AS (
SELECT 11 visitor_id, 'JFK' searched_to, 'LCY' searched_from, 'N' booked UNION ALL
SELECT 11, 'LGA', 'LCY', 'N' UNION ALL
SELECT 11, 'EWR', 'LCY', 'N' UNION ALL
SELECT 12, 'JFK', 'LCY', 'N' UNION ALL
SELECT 13, 'MSY', 'LTN', 'Y' UNION ALL
SELECT 14, 'JFK', 'LTN', 'N' UNION ALL
SELECT 14, 'JFK', 'LGW', 'N' UNION ALL
SELECT 14, 'EWR', 'LCY', 'Y' UNION ALL
SELECT 15, 'GOA', 'MSY', 'N'
)
результат будет как
Row visitor_id booked extended
1 11 false true
2 12 false false
3 15 false false
4 13 true false
5 14 true true
следующий шаг - сделать окончательный подсчет
#standardSQL
SELECT extended, booked, COUNT(1) cnt
FROM (
SELECT visitor_id, 'Y' = MAX(booked) booked,
1 < COUNTIF(searched_to IN ('JFK', 'LGA', 'EWR', 'MSY')
OR searched_from IN ('JFK', 'LGA', 'EWR', 'MSY')) extended
FROM `project.dataset.your_table`
GROUP BY visitor_id
)
GROUP BY extended, booked
это вернется
Row extended booked cnt
1 false false 2
2 false true 1
3 true true 1
4 true false 1
Вы можете протестировать, поиграть со всем запросом, используя фиктивные данные из вашего вопроса
#standardSQL
WITH `project.dataset.your_table` AS (
SELECT 11 visitor_id, 'JFK' searched_to, 'LCY' searched_from, 'N' booked UNION ALL
SELECT 11, 'LGA', 'LCY', 'N' UNION ALL
SELECT 11, 'EWR', 'LCY', 'N' UNION ALL
SELECT 12, 'JFK', 'LCY', 'N' UNION ALL
SELECT 13, 'MSY', 'LTN', 'Y' UNION ALL
SELECT 14, 'JFK', 'LTN', 'N' UNION ALL
SELECT 14, 'JFK', 'LGW', 'N' UNION ALL
SELECT 14, 'EWR', 'LCY', 'Y' UNION ALL
SELECT 15, 'GOA', 'MSY', 'N'
)
SELECT extended, booked, COUNT(1) cnt
FROM (
SELECT visitor_id, 'Y' = MAX(booked) booked,
1 < COUNTIF(searched_to IN ('JFK', 'LGA', 'EWR', 'MSY')
OR searched_from IN ('JFK', 'LGA', 'EWR', 'MSY')) extended
FROM `project.dataset.your_table`
GROUP BY visitor_id
)
GROUP BY extended, booked
Примечание: в заголовке вопроса вы упомянули searched for destination, но в самом вопросе вы упомянули посетителя № 15, который должен быть включен, поэтому я использовал для фильтрации и search_to, и search_from. при необходимости вы можете удалить фильтр для search_from
что ты уже испробовал? Также предоставьте ожидаемый результат.