Нужен LEFT JOIN от owners к pets, COALESCE для имени владельца и CASE для age_gap. Условие нулевой разницы относится к отсутствующему имени хозяина, а не к отсутствующему питомцу.
SQL‑запрос для получения имени хозяина, имени питомца и разницы их возрастов
Нужен LEFT JOIN от owners к pets, COALESCE для имени владельца и CASE для age_gap. Условие нулевой разницы относится к отсутствующему имени хозяина, а не к отсутствующему питомцу.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Составьте запрос, который выводит имя владельца животного под псевдонимом keeper_name, имя самого питомца под псевдонимом animal_name и разницу между возрастом хозяина и возрастом животного как age_gap. В результат включаются все строки из таблицы owners; если имя владельца отсутствует (NULL), замените его на строку "N/A", а значение age_gap в таком случае сделайте равным 0. Сортировка должна осуществляться сначала по имени владельца в алфавитном порядке, затем по убыванию значения разницы возрастов.
owners table :
| ID | Name | Age | Pet_ID |
|---|---|---|---|
| 1 | Aubrey Little | 20 | 1 |
| 2 | Chett Crawfish | 45 | 3 |
| 3 | Jules Spinner | 10 | 4 |
| 4 | Magnus Burnsides | 9 | 2 |
| 5 | Veronica Dunn | 8 | NULL |
pets table :
| ID | Name | Age | Animal |
|---|---|---|---|
| 1 | Dr. Harris Bonkers | 1 | Rabbit |
| 2 | Moon | 9 | Dog |
| 3 | Ripley | 7 | Cat |
| 4 | Tom | 2 | Cat |
| 5 | Maisie | 10 | Dog |
Ответ
Нужен LEFT JOIN от owners к pets, COALESCE для имени владельца и CASE для age_gap. Условие нулевой разницы относится к отсутствующему имени хозяина, а не к отсутствующему питомцу.
Запрос сохраняет всех владельцев:
SELECT COALESCE(o.name, 'N/A') AS keeper_name,
p.name AS animal_name,
CASE WHEN o.name IS NULL THEN 0
ELSE o.age - p.age END AS age_gap
FROM owners AS o
LEFT JOIN pets AS p ON p.id = o.pet_id
ORDER BY keeper_name ASC, age_gap DESC;
У Veronica питомца нет, поэтому animal_name и age_gap равны NULL: условие не требует заменять эти значения. У хозяина с NULL-именем age_gap будет 0 независимо от возраста питомца. Если нужна отдельная политика сортировки NULL, задайте её средствами выбранной СУБД.