Недавно меня попросили написать запрос для выбора свойств объектов из группы, которая содержит максимальное количество таких объектов.Итак, я сделал это в базе данных Northwind (распределенный образец MSFT) несколькими способами.
ONE:
SELECT cat.CategoryName, prod.ProductName
FROM Categories cat
JOIN Products prod ON cat.CategoryID = prod.CategoryID
JOIN (SELECT TOP 1 p.CategoryID, COUNT(p.ProductId) as products
FROM Categories c
JOIN Products p on c.CategoryID = p.CategoryID
GROUP BY p.CategoryID
ORDER BY products desc) c ON c.CategoryID = cat.CategoryID
TWO:
SELECT cat.CategoryName, prod.ProductName
FROM Categories cat
JOIN Products prod ON cat.CategoryID = prod.CategoryID
JOIN (SELECT CategoryID, COUNT(ProductID) m_count
FROM Products
GROUP BY CategoryID
HAVING COUNT(ProductID) = (SELECT MAX(sub.cnt)
FROM (SELECT CategoryId, COUNT(ProductID) cnt
FROM Products
GROUP BY CategoryId) sub)) m ON m.CategoryID = cat.CategoryID
Вопрос в том,: что быстрее любого, почему ?В планах исполнения ничего особенно не выделяется.Прошедшее время меняется незначительно, но примерно одинаково.База данных, конечно, крошечная.