Выберите поле строки с минимальным значением другого столбца, используя подзапрос и статистическую функцию

Попытка выполнить упражнения по следующей ссылке для примера базы данных 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

Оба дают одинаковый ответ.

Другие вопросы по тегам