#sql #sql-server #snowflake-cloud-data-platform
#sql #sql-сервер #снежинка-облако-платформа для передачи данных
Вопрос:
Нужен SQL-запрос, который ответит на этот вопрос.
Пожалуйста, сообщите нам, во скольких странах у нас есть пользователи и во скольких странах у нас нет пользователей. Это должно быть представлено в таблице в одной строке и двух столбцах (в одном указано количество стран, в которых у нас есть пользователи, а в другом-количество стран, в которых у нас нет пользователей).
У нас есть две таблицы: AllCountriesInTheWorld и AllUsers.
Таблица Все страны мира
идентификатор страны | название страны |
---|---|
1 | США |
2 | Франция |
3 | Италия |
4 | Португалия |
5 | Испания |
6 | Канада |
7 | Великобритания |
8 | Китай |
9 | Япония |
10 | Германия |
Пользователи таблиц
идентификатор пользователя | имя пользователя | идентификатор страны |
---|---|---|
a1 | Джон | 4 |
b2 | Джейн | 6 |
c3 | Тони | 6 |
d4 | Dan | 9 |
e5 | Дейв | 1 |
Заранее большое спасибо, ребята!
Комментарии:
1. Ты что — нибудь пробовал?
Ответ №1:
Если вы ОСТАВИТЕ ПРИСОЕДИНИТЬСЯ к 2 таблицам по их общему ключу,
вы сможете получить все страны с пользователями или без них.
select * from AllCountriesInTheWorld ctry left join AllUsers usr on usr.country_id = ctry.country_id
идентификатор страны | название страны | идентификатор пользователя | имя пользователя | идентификатор страны |
---|---|---|---|---|
1 | США | e5 | Дейв | 1 |
2 | Франция | нулевой | нулевой | нулевой |
3 | Италия | нулевой | нулевой | нулевой |
4 | Португалия | a1 | Джон | 4 |
5 | Испания | нулевой | нулевой | нулевой |
6 | Канада | b2 | Джейн | 6 |
6 | Канада | c3 | Тони | 6 |
7 | Великобритания | нулевой | нулевой | нулевой |
8 | Китай | нулевой | нулевой | нулевой |
9 | Япония | d4 | Dan | 9 |
10 | Германия | нулевой | нулевой | нулевой |
Если вы затем СГРУППИРУЕТЕСЬ ПО странам, то сможете ПОДСЧИТАТЬ, сколько идентификаторов пользователей есть в каждой стране.
count(usr.user_id) as total_users
идентификатор страны | всего пользователей |
---|---|
1 | 1 |
2 | 0 |
3 | 0 |
4 | 1 |
5 | 0 |
6 | 2 |
7 | 0 |
8 | 0 |
9 | 1 |
10 | 0 |
Затем просто оберните это в CTE или подзапросе и используйте условную агрегацию для общего числа пользователей.
;with CTE_COUNTRIES as ( ... ) select sum(case when total_users gt; 0 then 1 else 0 end) as countries_with_users , sum(case when total_users = 0 then 1 else 0 end) as countries_without_users from CTE_COUNTRIES
страны с пользователями | страны без_пользователей |
---|---|
4 | 6 |