Войти Регистрация
Data base

229. Пользователи с несколькими карточками

Лёгкая

В users — учётные записи (user_id, login), в cards — карточки получателя доставки: имя и фамилия. Один пользователь может завести несколько карточек, в том числе с одинаковым именем, например для дома и для офиса.

Карточки удалённых пользователей остаются в cards, а строки в users уже нет. Такие карточки не считаются.

Верните пользователей, у которых больше одной карточки: user_id, login, cards. Порядок — по cards по убыванию, затем по user_id.

В работе: Разбор адресной книги доставки: кто держит несколько получателей и кому показывать выбор при оформлении.

Таблицы

users — учётная запись

КолонкаТипЧто значит
user_idintключ
logintextлогин

cards — карточка получателя

КолонкаТипЧто значит
card_idintключ
user_idintвладелец
nametextимя
surnametextфамилия

Пример: данные

users · 3 строки

user_idlogin
1k.sorokina
2pavel.ivlev
3tanya-88

cards · 6 строк

card_iduser_idnamesurname
101КсенияСорокина
111МихаилСорокин
121КсенияСорокина
132ПавелИвлев
143ТатьянаРябова
153ОлегРябов

Ожидаемый ответ

user_idlogincards
1k.sorokina3
3tanya-882
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
user_id, login, cards
JOINGROUP BYHAVING

Источник: gist кандидата «Yandex SQL interview», GitHub, 2021. Условие пересказано своими словами.