Задать вопрос
@Bazis911

Как найти строку, содержащую максимум определенного столбца?

Разбираю примеры элементарных запросов на MySQL. На официальном сайте приведено несколько примеров, для того чтобы найти строку, содержащую максимальный элемент определенного столбца. Не могу понять, как из такого запроса:

SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.price < s2.price
WHERE s2.article IS NULL;

действительно получается правильный ответ.. Таблица shop выглядит так:
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 1 | A | 3.45 |
| 1 | B | 3.99 |
| 2 | A | 10.99 |
| 3 | B | 1.45 |
| 3 | C | 1.69 |
| 3 | D | 1.25 |
| 4 | D | 19.95 |
+---------+--------+-------+
Не поняв откуда берется NULL в поле s2. article, я решил удалить условие WHERE и посмотреть, как будут таблицы присоединяться по LEFT JOIN. Результат меня удивил. Также я не понял по какому принципу таблицы объединилсь в такую 6083e5b325c45978283227.png
Надо отметить что первичным ключом в этой таблице является пара столбцов article, dealer.
Прошу помощи разъяснить как присоединились таблицы и как получилось найти строку, содержащую максимальный элемент в поле price.
ссылка на первоисточник:
https://dev.mysql.com/doc/refman/8.0/en/examples.html
  • Вопрос задан
  • 102 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Сделайте запрос
SELECT *
  FROM `shop` AS `s1`
  LEFT JOIN `shop` AS `s2` ON `s1`.`price` < `s2`.`price`
Тогда вы увидите обе соединённые таблицы.
Но, с точки зрения ресурсов, это довольно расточительный запрос. Тут может быть проще использовать сортировку, особенно если есть индекс по `price`:
SELECT *
  FROM `shop`
  ORDER BY `price` DESC
  LIMIT 1
Ответ написан
Комментировать
@immelnikoff
Изучаю БД
Чтобы понять как происходит LEFT JOIN, вытяните в select-лист все поля из обеих таблиц и отсортируйте вывод должным образом:
ORDER BY s1.price, s2.price
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы