Оператор SELECT для новичка

Подскажите пожалуйста, возможно существует еще одно решение. Итак, есть таблица "users" (имя, фамилия, дата рождения и вес). Необходимо вывести имя и максимальный вес человека, который был рожден начиная с 1 января 2000 года. При этом указать название столбца "Наибольший вес"

  • вариант 1: выводит только вес, но хотелось бы чтоб еще и имя;

    SELECT MAX(weight_kg) AS "Наибольший вес" FROM users WHERE date_of_birth > "1999-12-31";

  • вариант 2: выдает наибольший вес, но имя самого первого пользователя, что неверно;

    SELECT MAX(weight_kg) AS "Наибольший вес", firstname FROM users WHERE date_of_birth > "1999-12-31";

  • вариант 3: выдает верный результат, но есть ли другой способ ?

    SELECT weight_kg AS "Наибольший вес", firstname FROM users WHERE date_of_birth > "1999-12-31" GROUP BY firstname ORDER BY weight_kg DESC LIMIT 1;

Заранее всем спасибо :)


Ответы (1 шт):

Автор решения: Dmitry

Способ упомянутый в комментариях

Тут псевдокод, подправьте на нужные значения

SELECT column, column_max_value 
FROM your_table 
WHERE column_max_value =(SELECT MAX(column_max_value) FROM your_table)
AND dates > YYYY-MM-DD;

Такой запрос возвращает все строки (если такие имеются) с максимальным значением. Следовательно можно дописать сортировку по имени и вытаскивать самого тяжелого и первого по алфавиту

Субъективный комментарий на размышление

Мне все-таки кажется, что указанный способ ТС будет лучше по двум причинам:

  1. Понятный запрос и логика без ветвлений
  2. БД же может индексировать максимальное значение и если таковое единично, то оно много быстрее будет отрабатывать, если необходимо забирать только первую строку. Здесь сомнения, поправьте, те, кто погружен в тему индексации БД
→ Ссылка