2013-03-16 3 views
1

База данных - это AdventureWorks.Максимальное количество сгруппированных элементов

select COUNT(*) as 'Number of times a product is sold at same quantity' 
from 
    Sales.SalesOrderDetail 
group by 
     OrderQty, ProductID 
order by 
     COUNT(*) desc 

Это возвращает данные, как это:

Number of times a product is sold at same quantity 
-------------------------------------------------- 
4279 
3216 
3095 
2376 
2334 
2319 
2234 
2201 
2121 
2025 
1712 
1488 
1396 
1161 
1044 

и другие 2600+ строк.

Я заинтересован в получении 4279 в качестве выхода.

Я не могу применить Max, поскольку он не работает с функцией агрегата или подзапросом. Я все равно пробовал. Не работает.

Я предполагаю, что не могу, поскольку count (*) не является столбцом. Но если есть способ:

Как я могу получить максимум такого вывода?

ответ

2

просто добавить TOP ограничить количество результатов

select TOP 1 COUNT(*) as 'Number of times a product is sold at same quantity' 
from Sales.SalesOrderDetail 
group by OrderQty, ProductID 
order by COUNT(*) desc 

UPDATE 1

WITH results 
AS 
(
    select COUNT(*) as [Number of times a product is sold at same quantity], 
     DENSE_RANK() OVER (ORDER BY COUNT(*) DESC) rank_no 
    from Sales.SalesOrderDetail 
    group by OrderQty, ProductID 
) 
SELECT [Number of times a product is sold at same quantity] 
FROM results 
WHERE rank_no = 2 
+1

@AnubhavSaini - Почему задать вопрос, который гласит: "Я заинтересован в получении 4279 в качестве выхода." если это не ваша фактическая цель? Это просто тратит время на ответчиков, которые сначала должны ответить на интересующий вас вопрос, а затем изменить его, чтобы ответить на вопрос, который вы хотели спросить. –

+0

вы можете сделать это с помощью 'CTE' и' Window Function', см. Здесь, http://www.sqlfiddle.com/#!3/2d7ba/7 –

+0

Сделайте этот ответ подзапросом, но измените значение 1 на 2. Затем выберите min(). –

Смежные вопросы