Узнать кто старше всех в семье sql
Перейти к содержимому

Узнать кто старше всех в семье sql

  • автор:

Как выбрать с SQL таблицы самого старшего человека

Здравствуйте знатоки SQL Есть таблица |employee_id|last_name|first_name|birth_date|photo|notes| Как мне вывести самого старшего человека с полями: last_name , first_name ? Пишу так SELECT MAX(birth_date), last_name, first_name FROM employees Выдает ошибку:

 Column "LAST_NAME" must be in the GROUP BY list; SQL statement: /* Feel free to remove this comment and write your solution here */ SELECT MAX(birth_date), last_name, first_name FROM employees [90016-200] 

Как это исправить? Спасибо.
Отслеживать
1,630 2 2 золотых знака 15 15 серебряных знаков 21 21 бронзовый знак
задан 21 ноя 2020 в 18:51
35 1 1 серебряный знак 5 5 бронзовых знаков
Как мне вывести самого старшего человека SELECT * FROM employees ORDER BY birth_date LIMIT 1
21 ноя 2020 в 19:11
@Akina, только DESC
21 ноя 2020 в 20:12
@Egorithm Старший — это с минимальным датом рождения. Так что ни разу не DESC.
21 ноя 2020 в 20:24
@Akina, точно, время то в секундах с 70го.
22 ноя 2020 в 9:08

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

SELECT last_name,first_name FROM employees WHERE birth_date = (SELECT min(birth_date) FROM employees ) 

Отслеживать
1,630 2 2 золотых знака 15 15 серебряных знаков 21 21 бронзовый знак
ответ дан 21 ноя 2020 в 19:04
35 1 1 серебряный знак 5 5 бронзовых знаков
подзапрос там был не нужен
21 ноя 2020 в 20:03
А как без подзапроса? Можете написать? спасибо.
21 ноя 2020 в 20:45

    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Урок 2. Составные условия

В прошлом уроке мы научились выбирать совершеннолетних пользователей с помощью простого SQL запроса.

SELECT last_name, first_name, birthday FROM users WHERE age >= 18

Теперь попробуем немного уточнить запрос. Например, выберем всех совершенолетних мужчин. В таблицу я добавил дополнительное строковое поле sex, которое хранит m для мужчин и w для женщин:

Новая таблица users

id first_name last_name birthday age sex
1 Дмитрий Иванов 1996-12-11 20 m
2 Олег Лебедев 2000-02-07 17 m
3 Тимур Шевченко 1998-04-27 19 m
4 Светлана Иванова 1993-08-06 23 w
5 Олег Ковалев 2002-02-08 15 m
6 Алексей Иванов 1993-08-05 23 m
7 Алена Процук 1997-02-28 18 w

Давайте добавим вывод столбца sex и оставим только мужчин. Для этого в блоке условий, который начинается со слова WHERE нужно добавить AND sex = ‘m’:

SELECT last_name, first_name, birthday, sex FROM users WHERE age >= 18 AND sex = 'm'

После выполнения SQL запроса получиться такая таблица:

Результат выполнения SQL-запроса

id last_name first_name birthday sex
1 Иванов Дмитрий 1996-12-11 m
3 Шевченко Тимур 1998-04-27 m
6 Иванов Алексей 1993-08-05 m

Посмотрим на SQL запрос. Сейчас блок WHERE содержит составное условие: возраст больше или равен 18 годам и пол равен m. Это простое логическое выражение, которому соответствуют все записи для которых оба условия верны. То есть у которых одновременно и возраст от 18 лет и sex = «m».

Кстати, о sex = «m». Так как мы используем равенство, в результируеющей таблице в колонке sex для всех записей у нас выводится m. Это не логично, ведь мы и так знаем, что выбираем мужчин, поэтому смысла в том, что мы эту информацию выводим в таблице нет. А значит можно удалить sex из запроса. Удалим и посмотрим на результат выполнения SQL-запроса:

SELECT last_name, first_name, birthday FROM users WHERE age >= 18 AND sex = 'm'
Результат выполнения SQL-запроса

id last_name first_name birthday
1 Иванов Дмитрий 1996-12-11
3 Шевченко Тимур 1998-04-27
6 Иванов Алексей 1993-08-05

Строки выводятся те же, однако столбца sex больше нет.

Обратите внимание, что извлекаем мы столбцы last_name, first_name, birthday, а фильтрутем по age и sex. То есть не обязательно чтобы столбцы, которые мы получаем, совпадали со столбцами в условии. Главное, чтобы все они были в таблице.

Но вернемся к составным условиям.

Кроме операции AND (И), в условии можно применять OR (ИЛИ). Давайте заменим AND на OR, а также вернем колонки sex и age:

SELECT last_name, first_name, birthday, sex FROM users WHERE age >= 18 OR sex = 'm'

И посмотрим на результат:

Новая таблица users

>

id last_name first_name birthday sex age
1 Иванов Дмитрий 1996-12-11 m 20
2 Лебедев Олег 2000-02-07 m 17
3 Шевченко Тимур 1998-04-27 m 19
4 Иванова Светлана 1993-08-06 w 23
5 Ковалев Олег 2002-02-08 m 15
6 Иванов Алексей 1993-08-05 m 23
7 Процук Алена 1997-02-28 w 18

Получили всех мужчин, а также женщин, которым исполнилось 18 лет. В частности в SQL-таблице две женщины старше 18 лет и все мужчины, даже те, которым меньше 18. Всё это соответствует условию ИЛИ. ИЛИ возраст от 18 лет, ИЛИ мужской пол.

Теперь переключимся на таблицу products. В ней появилось поле country, которое содержит данные о стране производителе:

Таблица products

id name count price country
1 Телевизор 3 43200.00 RU
2 Микроволновая печь 4 3200.00 RU
3 Холодильник 3 12000.00 UA
4 Роутер 1 1340.00 US
5 Компьютер 0 26150.00 US
6 Утюг 6 3200.00 BL
7 Пылесос 11 4500.00 UA

Давайте выберем товары, произведененные в России, Белоруссии и на Украине. Напишем SQL-запрос:

SELECT * FROM products WHERE country = "RU" OR country = "UA" OR country = "BL"

После выполнения запроса мы получим следующую таблицу:

Результат выполнения запроса

id name count price country
1 Телевизор 3 43200.00 RU
2 Микроволновая печь 4 3200.00 RU
3 Холодильник 3 12000.00 UA
6 Утюг 6 3200.00 BL
7 Пылесос 11 4500.00 UA

Разберем запрос: в блоке WHERE мы используем три условия, разделенные OR (или). Во всех трех условиях мы с помощью символа равенства сравниваем значение в столбце country с одной из стран: ИЛИ Россия, ИЛИ Украина, ИЛИ Белоруссия.

Если мы хотим получить товары еще каких-то стран, то нужно добавить еще условия OR. Это не очень удобно, так как запрос становится громоздиким.

Но его можно упростить. Кроме стандартных условий сравнения AND и OR в языке SQL есть условие принадлежности IN, которое в данном случае подходит лучше. Напишем после WHERE:

SELECT * FROM products WHERE country IN ("RU", "UA", "BL")

Конструкция получилась короче и понятней. И с помощью неё мы выбираем данные, в которых страна равна любом из значений перечисленных в скобках. После запуска запроса мы получим результат, аналогичный предыдущему.

Но давайте добавим к запросу еще одно условие. Например нам нужны не просто товары, а товары стоимостью до 10 000 рублей. Напишем:

SELECT * FROM products WHERE country IN ("RU", "UK", "BL") AND price < 10000

И посмотрим результат:

Результат выполнения SQL-запроса

id name count price country
2 Микроволновая печь 4 3200.00 RU
6 Утюг 6 3200.00 BL
7 Пылесос 11 4500.00 UA

Получили новую таблицу с тремя записями, которые удовлетовряют новому условию. И в этом условии мы совместили AND и IN. То есть в SQL-запросах можно совмещать логические операции AND и OR с оператором IN. Что делает их очень гибкими.

Теперь давай попробуем выбрать товары, стоимостью от 10000 до 20000.

Условие с country уберем и напишем:

SELECT * FROM products WHERE price >= 10000 AND price 

В результате получается такая таблица:

Таблица products

id name count price country
3 Холодильник 3 12000.00 UA

Выполним — получили 1 товар в этом ценовом интервале. Рассмотрим на запрос. Как видите в этой конструкции мы снова написали двойное условие по одному полю — price. И с одной строны всё логично и понятно, а с другой стороны эту конструкцию также можно упростить.

SELECT * FROM products WHERE price BETWEEN 10000 AND 20000

Теперь запрос звучит так: ВЫБРАТЬ все столбцы из таблицы products, в которых цена между 10000 и 20000. Звучит более чем понятно.

После запуска мы получим всё тот же один товар.

Вообще AND, OR, IN и BETWEEN — это основные конструкции для построения условий в SQL запросах и используются они в блоке WHERE. Вы можете применять их как по одиночке, так комбинируя в самых разлчных вариантах.

Следующий урок

Урок 3. Порядок AND и OR

Вы узнаете о приоритете AND и OR, а также с ошибками, которые возникают у новичков в SQL-запросах с несколькими условиями.

Полный курс с практикой

  • 57 уроков
  • 261 задание
  • Сертификат
  • Поддержка преподавателя
  • Доступ к курсу навсегда
  • Можно в рассрочку

SQL ACADEMY ответы и решения заданий (часть 1, задания 1-22)

SQL Academy (ответы и решения заданий 1-22)

SQL Academy (ответы и решения заданий 1-22)

ВКонтакте WhatsApp Pinterest Facebook Email

Ниже представлены наши варианты решения заданий из онлайн тренажера на сайте SQL ACADEMY (sql-academy.org). Ответы на 66 заданий представленные в онлайн тренажере разбиты на 3 части. Здесь, в первой части, представлены ответы на первые 22 задания.

Задание 1. Вывести имена всех когда-либо обслуживаемых пассажиров авиакомпаний.

SELECT name FROM Passenger;

Задание 2. Вывести названия всеx авиакомпаний.

SELECT name FROM Company;

Задание 3. Вывести все рейсы, совершенные из Москвы

SELECT * FROM Trip WHERE town_from = 'Moscow';

Задание 4. Вывести имена людей, которые заканчиваются на “man”

SELECT name FROM Passenger WHERE name LIKE '%man';

Задание 5. Вывести количество рейсов, совершенных на TU-134

SELECT COUNT(*) AS count FROM Trip WHERE plane = 'TU-134';

Задание 6. Какие компании совершали перелеты на Boeing

SELECT DISTINCT name FROM Company JOIN Trip ON Company.id=Trip.company WHERE plane = 'Boeing';

Задание 7. Вывести все названия самолётов, на которых можно улететь в Москву (Moscow)

SELECT DISTINCT plane FROM Trip WHERE town_to = 'Moscow';

Задание 8. В какие города можно улететь из Парижа (Paris) и сколько времени это займёт?

SELECT town_to, TIMEDIFF(time_in, time_out) AS flight_time FROM Trip WHERE town_from = 'Paris';

Задание 9. Какие компании организуют перелеты с Владивостока (Vladivostok)?

SELECT DISTINCT name FROM Company JOIN Trip ON Company.id=Trip.company WHERE town_from = 'Vladivostok';

Задание 10. Вывести вылеты, совершенные с 10 ч. по 14 ч. 1 января 1900 г.

SELECT * FROM Trip WHERE time_out BETWEEN '1900-01-01 10:00:00' AND '1900-01-01 14:00:00';

Задание 11. Вывести пассажиров с самым длинным именем

SELECT name FROM Passenger WHERE LENGTH(name) = (SELECT MAX(LENGTH(name)) FROM Passenger);

Задание 12. Вывести id и количество пассажиров для всех прошедших полётов

SELECT trip, COUNT(passenger) as count FROM Pass_in_trip GROUP BY trip;

Задание 13. Вывести имена людей, у которых есть полный тёзка среди пассажиров

SELECT name FROM Passenger GROUP BY name HAVING COUNT(name) > 1;

Задание 14. В какие города летал Bruce Willis?

SELECT DISTINCT town_to FROM Trip JOIN Pass_in_trip ON Trip.id=Pass_in_trip.trip JOIN Passenger ON Pass_in_trip.passenger=Passenger.id WHERE name = 'Bruce Willis';

Задание 15. Во сколько Стив Мартин (Steve Martin) прилетел в Лондон (London)?

SELECT time_in FROM Trip JOIN Pass_in_trip ON Trip.id=Pass_in_trip.trip JOIN Passenger ON Pass_in_trip.passenger=Passenger.id WHERE name='Steve Martin' AND town_to='London';

Задание 16. Вывести отсортированный по количеству перелетов (по убыванию) и имени (по возрастанию) список пассажиров, совершивших хотя бы 1 полет.

SELECT name, COUNT(*) AS count FROM Passenger JOIN Pass_in_trip ON Passenger.id=Pass_in_trip.passenger GROUP BY passenger HAVING COUNT(trip) > 0 ORDER BY COUNT(trip) DESC, name;

Задание 17. Определить, сколько потратил в 2005 году каждый из членов семьи

SELECT member_name, status, SUM(amount*unit_price) AS costs FROM FamilyMembers JOIN Payments ON FamilyMembers.member_id=Payments.family_member WHERE YEAR(date) = 2005 GROUP BY member_name, status;

Задание 18. Узнать, кто старше всех в семьe

SELECT member_name FROM FamilyMembers WHERE birthday = (SELECT MIN(birthday) FROM FamilyMembers);

Задание 19. Определить, кто из членов семьи покупал картошку (potato)

SELECT DISTINCT status FROM FamilyMembers JOIN Payments ON FamilyMembers.member_id=Payments.family_member JOIN Goods ON Payments.good=Goods.good_id WHERE good_name = 'potato';

Задание 20. Сколько и кто из семьи потратил на развлечения (entertainment). Вывести статус в семье, имя, сумму

SELECT fm.status, fm.member_name, SUM(p.amount*p.unit_price) AS costs FROM FamilyMembers AS fm JOIN Payments AS p ON fm.member_id=p.family_member JOIN Goods AS g ON p.good=g.good_id JOIN GoodTypes AS gt ON g.type=gt.good_type_id WHERE good_type_name = 'entertainment' GROUP BY fm.status, fm.member_name;

Задание 21. Определить товары, которые покупали более 1 раза

SELECT good_name FROM Goods JOIN Payments ON Goods.good_id=Payments.good GROUP BY good HAVING COUNT(good) > 1;

Задание 22. Найти имена всех матерей (mother)

SELECT member_name FROM FamilyMembers WHERE status = 'mother';

SQL Вывести самого младшего сотрудника

Имеется таблица Сотрудники( *id, ФИО(char), Дата рождения(date)). Подскажите, пожалуйста, как правильно написать запрос на SQL, который выведет ФИО самого младшего сотрудника (учитывая, что дата рождения представлена в формате дд.мм.гггг)?

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Отобразить самого старшого и самого младшего участника курсов
Существует база данных с набором информации, которая включает в себя имя, фамилию и год рождения.

Определить фамилию самого младшего сотрудника среди военнообязанных
Нужно сделать с классами, но чтобы было предельно просто. Не используя вектора. Помогите. Известны.

Число. Вывести только цифры самого младшего и самого старшего разряда
Дано n-значное целое число введеное с клавиатуры. Вывести только цифры самого младшего и самого.

Вывести только цифры самого младшего и самого старшего разряда
задача: Вывести только цифры самого младшего и самого старшего разряда вот мой код: type.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *