Запрос, чтобы выбрать продукт с самыми высокими продажами - PullRequest
0 голосов
/ 18 октября 2018

Я хотел бы получить идентификатор продукта, название продукта и продажи за наличный расчет для продукта с ВЫСОКИМИ продажами за наличные по некоторым данным.

Я знаю, как написать запрос, который извлекает все записи, а затем упорядочивает их по порядку, с самой высокой продажей наличными вверху (см. Ниже).

Затем я могу выбрать запись с самыми высокими продажами из этого запроса.

Но есть ли более быстрый способ написать это?т.е. простой запрос, который будет возвращать только запись с самыми высокими продажами?ТИА.

select
    es.ClientProductID,
    es.ProductName,
    ash.price * ash.sales as CashSales 
from AggregatedSalesHistory as ash 
join v_EnterpriseStructure as es on es.ProductSID = ash.ProductSID 
group by 
    es.ClientProductID,
    es.ProductName,
    ash.price * ash.sales 
order by 
    ash.price * ash.sales DESC

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Вы можете использовать ранжирование и группировку в наборе результатов, чтобы получить строку первого ранга (или любого другого ранга)

select * from (select
row_number() over (partition by es.ClientProductID,es.ProductName order by (ash.price * ash.sales) desc) as salesRank,
    es.ClientProductID a,
    es.ProductName b,
    ash.price * ash.sales as CashSales 
from AggregatedSalesHistory as ash 
join v_EnterpriseStructure as es on es.ProductSID = ash.ProductSID ) subquery1 where salesRank=1;
0 голосов
/ 18 октября 2018
select
    es.ClientProductID,
    es.ProductName,
    ash.price * ash.sales as CashSales 
from AggregatedSalesHistory as ash 
join v_EnterpriseStructure as es on es.ProductSID = ash.ProductSID 
group by 
    es.ClientProductID,
    es.ProductName,
    ash.price * ash.sales 
having
    max(ash.price * ash.sales)

Выше запрос даст вам результат с самыми высокими продажами.

...