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

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

  • автор:

SQL → Вычислить возраст по дате рождения

Более универсальный вариант SQL запроса из официальной документации:

SELECT birthday, ( (YEAR(CURRENT_DATE) - YEAR(birthday)) - /* step 1 */ (DATE_FORMAT(CURRENT_DATE, '%m%d') < DATE_FORMAT(birthday, '%m%d')) /* step 2 */ ) AS age FROM users

Смысл следующий — первым шагом вычитаем из текущего года, год рождения, вторым шагом вычитаем единичку если дня рождения в этом году ещё не было.

birthday это поле с датой в любом валидном формате (не timestamp), например 1989-07-22 или даже 1989-07-22T00:00:00 .

Похожие записи

  • Экспорт/импорт большой базы
  • Узнать следующую и предыдущую запись в выборке по полю с неуникальными значениями
  • Избавляемся от ошибки "MySQL server has gone away"
  • Выборка постов с определёнными тегами
  • Выборка людей определённого возраста

Как выбрать с 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,640 2 2 золотых знака 16 16 серебряных знаков 21 21 бронзовый знак
задан 21 ноя 2020 в 18:51
57 1 1 серебряный знак 10 10 бронзовых знаков
Как мне вывести самого старшего человека 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,640 2 2 золотых знака 16 16 серебряных знаков 21 21 бронзовый знак
ответ дан 21 ноя 2020 в 19:04
57 1 1 серебряный знак 10 10 бронзовых знаков
подзапрос там был не нужен
21 ноя 2020 в 20:03
А как без подзапроса? Можете написать? спасибо.
21 ноя 2020 в 20:45

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

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

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

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

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

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

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

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

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

Задание 23. Найдите самый дорогой деликатес (delicacies) и выведите его стоимость.

SELECT g.good_name, p.unit_price FROM Goods AS g JOIN Payments AS p ON (g.good_id=p.good) JOIN GoodTypes AS gt ON (g.type=gt.good_type_id) WHERE p.unit_price = (SELECT MAX(p.unit_price) FROM Payments AS p JOIN Goods AS g ON (g.good_id=p.good) JOIN GoodTypes AS gt ON (g.type=gt.good_type_id) WHERE gt.good_type_name='delicacies');

Задание 24. Определить кто и сколько потратил в июне 2005.

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

Задание 25. Определить, какие товары имеются в таблице Goods, но не покупались в течение 2005 года

SELECT good_name FROM Goods WHERE good_id NOT IN (SELECT good FROM Payments WHERE YEAR(date) = 2005);

Задание 26. Определить группы товаров, которые не приобретались в 2005 году

SELECT good_type_name FROM GoodTypes WHERE good_type_id NOT IN ( SELECT good_type_id FROM GoodTypes JOIN Goods ON good_type_id=type JOIN Payments ON good_id=good WHERE YEAR(date)=2005);

Задание 27. Узнать, сколько потрачено на каждую из групп товаров в 2005 году. Вывести название группы и сумму

SELECT good_type_name, SUM(amount*unit_price) AS costs FROM GoodTypes JOIN Goods ON good_type_id=type JOIN Payments ON good_id=good WHERE YEAR(date)=2005 GROUP BY good_type_name;

Задание 28. Сколько рейсов совершили авиакомпании с Ростова (Rostov) в Москву (Moscow)?

SELECT COUNT(*) as count FROM Trip WHERE town_from='Rostov' AND town_to='Moscow';

Задание 29. Выведите имена пассажиров улетевших в Москву (Moscow) на самолете TU-134

SELECT DISTINCT name FROM Passenger JOIN Pass_in_trip ON Pass_in_trip.passenger=Passenger.id JOIN Trip ON Trip.id=Pass_in_trip.trip WHERE town_to='Moscow' AND plane='TU-134';

Задание 30. Выведите нагруженность (число пассажиров) каждого рейса (trip). Результат вывести в отсортированном виде по убыванию нагруженности.

SELECT trip, COUNT(Passenger) as count FROM Pass_in_trip GROUP BY trip ORDER BY count DESC;

Задание 31. Вывести всех членов семьи с фамилией Quincey.

SELECT * FROM FamilyMembers WHERE member_name LIKE '%Quincey';

Задание 32. Вывести средний возраст людей (в годах), хранящихся в базе данных. Результат округлите до целого в меньшую сторону.

SELECT FLOOR(AVG(YEAR(CURRENT_DATE) - YEAR(birthday))) AS age FROM FamilyMembers;

Задание 33. Найдите среднюю стоимость икры. В базе данных хранятся данные о покупках красной (red caviar) и черной икры (black caviar).

SELECT AVG(unit_price) AS cost FROM Payments WHERE good IN (SELECT good_id FROM Goods WHERE good_name LIKE '%caviar');

Задание 34. Сколько всего 10-ых классов

SELECT COUNT(name) AS count FROM Class WHERE name LIKE '10%';

Задание 35. Сколько различных кабинетов школы использовались 2.09.2019 в образовательных целях?

SELECT COUNT(classroom) AS count FROM Schedule WHERE date='2019-09-02';

Задание 36. Выведите информацию об обучающихся живущих на улице Пушкина (ul. Pushkina)?

SELECT * FROM Student WHERE address LIKE 'ul. Pushkina%';

Задание 37. Сколько лет самому молодому обучающемуся ?

SELECT MIN(TIMESTAMPDIFF(YEAR,birthday,CURRENT_DATE)) AS year FROM Student;

Задание 38. Сколько Анн (Anna) учится в школе?

SELECT COUNT(first_name) AS count FROM Student WHERE first_name='Anna';

Задание 39. Сколько обучающихся в 10 B классе ?

SELECT COUNT(student) AS count FROM Student_in_class JOIN Class ON Student_in_class.class=Class.id WHERE Class.name = '10 B';

Задание 40. Выведите название предметов, которые преподает Ромашкин П.П. (Romashkin P.P.) ?

SELECT name AS subjects FROM Subject JOIN Schedule ON Subject.id=Schedule.subject JOIN Teacher ON Schedule.teacher=Teacher.id WHERE Teacher.last_name='Romashkin' AND Teacher.first_name LIKE 'P%' AND Teacher.middle_name LIKE 'P%';

Задание 41. Во сколько начинается 4-ый учебный предмет по расписанию ?

SELECT start_pair FROM Timepair WHERE >Задание 42. Сколько времени обучающийся будет находиться в школе, учась со 2-го по 4-ый уч. предмет ?
SELECT DISTINCT TIMEDIFF( (SELECT end_pair FROM Timepair WHERE (SELECT start_pair FROM Timepair WHERE ) AS time FROM Timepair;

Задание 43. Выведите фамилии преподавателей, которые ведут физическую культуру (Physical Culture). Отсортируйте преподавателей по фамилии.

SELECT last_name FROM Teacher JOIN Schedule ON Teacher.id=Schedule.teacher JOIN Subject ON Schedule.subject=Subject.id WHERE Subject.name = 'Physical Culture' ORDER BY Teacher.last_name

Задание 44. Найдите максимальный возраст (колич. лет) среди обучающихся 10 классов ?

SELECT MAX(TIMESTAMPDIFF(YEAR,birthday,CURRENT_DATE)) as max_year FROM Student JOIN Student_in_class ON Student.id=Student_in_class.student JOIN Class ON Student_in_class.class=Class.id WHERE Class.name LIKE '10%';

Вывести только имя из поля таблицы, в котором указано «Имя Фамилия»?

В базе данных имена и фамилии всех членов семьи (таблица FamilyMembers) хранятся в формате "имя фамилия" (поле member_name). Необходимо их разделить и вывести только имена.

Я сделал это так:
SELECT SUBSTRING(member_name, 1, LOCATE(' ', member_name)) as firstName FROM FamilyMembers

Однако, почему-то, это неверно. Помогите, пожалуйста

  • Вопрос задан более двух лет назад
  • 4662 просмотра

Комментировать
Решения вопроса 1
cats_wrath @cats_wrath Автор вопроса

А, все, понял. Надо убрать пробел в конце:
SELECT SUBSTRING(member_name, 1, LOCATE(' ', member_name)-1) as firstName FROM FamilyMembers

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

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