Отбор городов с присутствием пользователей

Для исключения пустых городов используйте INNER JOIN по users.city_id = cities.id. Для каждого пользователя получится отдельная строка.

Короткий ответ

Что ответить на собеседовании

Для исключения пустых городов используйте INNER JOIN по users.city_id = cities.id. Для каждого пользователя получится отдельная строка.

Подробный разбор

Ответ с пояснениями

Условие

Сформировать SQL‑запрос, который выводит название города и имя пользователя, исключая при этом города, в которых нет ни одного пользователя.

create table cities (
    id serial primary key,
    name text not null
);

insert into cities (name)
values
('Москва'),
('Санкт-Петербург'),
('Краснодар');

create table users (
    id serial primary key,
    name text not null,
    city_id int not null references cities(id)
);

insert into users (name, city_id)
values
('Иван', 1),
('Анна', 1),
('Олеся', 2);

-- здесь должен быть SELECT‑запрос

Ответ

Для исключения пустых городов используйте INNER JOIN по users.city_id = cities.id. Для каждого пользователя получится отдельная строка.

Запрос:

SELECT c.name AS city, u.name AS user_name
FROM cities c
JOIN users u ON u.city_id = c.id
ORDER BY c.id, u.id;

По приведённым данным выводятся Москва — Иван, Москва — Анна, Санкт-Петербург — Олеся. Краснодар отсутствует: у него нет соответствующей строки users. GROUP BY не требуется, поскольку задача просит имена пользователей, а не агрегированное число жителей. ORDER BY делает порядок результата явным и повторяемым.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее