Выберите поле строки с минимальным значением другого столбца, используя подзапрос и статистическую функцию
Попытка выполнить упражнения по следующей ссылке для примера базы данных Northwind в MySQL.
http://laerer.rhs.dk/andersb/basicprog/database/exercises/northwindselect.htm
Вопрос "Использование SUBQUERY... найдите минимальную единицу Price из таблицы products. Используйте эту цену, чтобы найти productID и productName для продукта (ов) с минимальной ценой". меня немного смущает
Следующий запрос
SELECT ProductID, ProductName
FROM products
ORDER BY UnitPrice
LIMIT 1;
кажется, дает правильный ответ, но не использует SUB QUERY. Это стандартная практика для получения полей из строки, имеющей значение MIN/MAX из другого столбца? Т.е. без использования агрегатных функций MIN()
/MAX()
,
Я предполагаю, что этот метод будет вычислительно дорогим; СУБД сортирует таблицу перед печатью только верхней строки. Будет ли SUB QUERY или любой другой метод более эффективным? Возможно, используя соответствующую агрегатную функцию, а не ORDER BY
, Если так, какой запрос я должен использовать?
1 ответ
Ваш метод находит один товар с минимальной ценой. Если их больше одного, то вы их упускаете.
Итак, более общее решение - использовать что-то похожее на ваш запрос в качестве подзапроса:
select p.*
from products p join
(SELECT UnitPrice
FROM products
ORDER BY UnitPrice
LIMIT 1
) pmin
on p.UnitPrice = pmin.UnitPrice;
На самом деле, подзапрос будет чаще записываться:
(SELECT min(UnitPrice)
FROM products
) pmin
Оба дают одинаковый ответ.