Oracle
Чтобы получить продукт (ы) с минимальным общим количеством в Oracle, используйте FETCH FIRST ROWS
:
select prodid, sum(quantity) as sum_quantity
from saledetail
group by prodid
order by sum(quantity)
fetch first rows with ties;
Альтернативный вариант с использованием исходного запроса:
with sums as
(
select prodid, sum(quantity) as sum_quantity
from saledetail
group by prodid
)
select *
from sums
where sum_quantity = (select min(sum_quantity) from sums);
MySQL
Этот запрос дает вам один продукт с минимальной суммой количества:
select prodid, sum(quantity) as sum_quantity
from saledetail
group by prodid
order by sum(quantity)
limit 1;
Однако для LIMIT
не существует пункта связей , Таким образом, если два или более продуктов имеют одинаковое минимальное общее количество, вышеуказанный запрос выберет один из них произвольно.
Вот простой запрос для получения всех товаров с минимальной суммой количества:
select prodid, sum(quantity) as sum_quantity
from saledetail
group by prodid
having sum(quantity) =
(
select sum(quantity)
from saledetail
group by prodid
order by sum(quantity)
limit 1
);
Начиная с MySQL 8, вы можете использовать оконную функцию для чтения таблицы только один раз:
select prodid, sum_quantity
from
(
select
prodid,
sum(quantity) as sum_quantity,
min(sum(quantity)) over () as min_sum_quantity
from saledetail
group by prodid
) aggregated
where sum_quantity = min_sum_quantity;
Оба Oracle запроса и последний MySQL запрос являются стандартными SQL. MySQL не поддерживает fetch first rows with ties
, поэтому первый запрос Oracle не работает в MySQL. Второе с использованием предложения WITH
работает с MySQL 8.