Сгруппируйте строки по имени и оставьте группы, содержащие SQL и минимум два разных языка. Для приведённых данных запрос вернёт Nick и Ivan.
Дана таблица:
Сгруппируйте строки по имени и оставьте группы, содержащие SQL и минимум два разных языка. Для приведённых данных запрос вернёт Nick и Ivan.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дана таблица:
| name | lang |
|---|---|
| Nick | C# |
| Nick | SQL |
| Eva | Rust |
| Eva | C# |
| Vika | SQL |
| Ivan | Java |
| Ivan | SQL |
Написать запрос который выберет имена сотрудников, которые знают SQL и ещё хотя бы один любой язык. Считать, что один сотрудник — одно имя.
Ответ
Сгруппируйте строки по имени и оставьте группы, содержащие SQL и минимум два разных языка. Для приведённых данных запрос вернёт Nick и Ivan.
Пусть таблица называется employee_languages:
SELECT name
FROM employee_languages
GROUP BY name
HAVING COUNT(DISTINCT lang) >= 2
AND MAX(CASE WHEN lang = 'SQL' THEN 1 ELSE 0 END) = 1;
DISTINCT защищает от повторяющихся строк одного языка. Согласно условию имя однозначно задаёт сотрудника; в реальной схеме группировать обычно нужно по его идентификатору. Сравнение регистра названий зависит от выбранных правил хранения и СУБД.