Следующий запрос будет работать со средним вычислением:
SELECT Store, Item, CalcAvg AS Score
FROM (
SELECT Store, Item, CalcAvg, ROW_NUMBER() OVER (PARTITION BY Store ORDER BY CalcAvg ASC) AS Rn
FROM (
SELECT Store, Item, CAST(AVG(CAST(Score AS DECIMAL(9,2))) AS DECIMAL(9, 2)) AS CalcAvg
FROM TestTable
GROUP BY Store, Item
) AS Q
)AS R
WHERE R.Rn <= 2;
Демо с примерами данных:
DECLARE @TestTable TABLE (Store VARCHAR (20), Item VARCHAR (20), Score INT);
INSERT INTO @TestTable (Store, Item, Score) VALUES
('Amsterdam', 'Shirt_Black', 6),
('Amsterdam', 'Shirt_Blue', 8),
('Amsterdam', 'Shirt_White', 5),
('Amsterdam', 'Pants_Black', 3),
('Amsterdam', 'Pants_Black', 1),
('Amsterdam', 'Socks_Blue', 8),
('Amsterdam', 'Shirt_Black', 1),
('Rotterdam', 'Shirt_Blue', 5),
('Rotterdam', 'Shirt_White', 3),
('Rotterdam', 'Pants_Black', 7),
('Rotterdam', 'Socks_White', 6);
SELECT Store, Item, CalcAvg AS Score
FROM (
SELECT Store, Item, CalcAvg, ROW_NUMBER() OVER (PARTITION BY Store ORDER BY CalcAvg ASC) AS Rn
FROM (
SELECT Store, Item, CAST(AVG(CAST(Score AS DECIMAL(9,2))) AS DECIMAL(9, 2)) AS CalcAvg
FROM @TestTable
GROUP BY Store, Item
) AS Q
)AS R
WHERE R.Rn <= 2;
Вывод:
Store Item Score
--------------------------------
Amsterdam Pants_Black 2.00
Amsterdam Shirt_Black 3.50
Rotterdam Shirt_White 3.00
Rotterdam Shirt_Blue 5.00