Найти средний доход по каждой подкатегории из 5 лучших категорий с точки зрения количества проданных в VBA SQL - PullRequest
1 голос
/ 07 мая 2019

У меня есть два набора данных prod_cat_info и Transactions с двумя общими полями для категории продукта и подкатегории. Я пытаюсь получить средний доход по каждой подкатегории 5 лучших категорий по количеству проданных товаров. Я попробовал это снизу запрос, в котором пункт не работает.

SELECT prod_cat_info.prod_subcat, AVG(Transactions.total_amt)
FROM Transactions INNER JOIN
    prod_cat_info
    ON Transactions.prod_cat_code = prod_cat_info.prod_cat_code AND
        Transactions.prod_subcat_code = prod_cat_info.prod_sub_cat_code
GROUP BY prod_cat_info.prod_subcat
WHERE Transactions.prod_cat_code IN (
    SELECT TOP 5 Transactions.prod_cat_code
    FROM Transactions
    GROUP BY Transactions.prod_cat_code
    ORDER BY SUM(Transactions.Qty) DESC
    )
GROUP BY prod_cat_info.prod_subcat

1 Ответ

3 голосов
/ 07 мая 2019

Вам не нужен подзапрос вообще. Просто используйте TOP и ORDER BY:

SELECT TOP (5) pci.prod_subcat, AVG(t.total_amt)
FROM Transactions t INNER JOIN
     prod_cat_info pci
     ON t.prod_cat_code = pci.prod_cat_code AND
        t.prod_subcat_code = pci.prod_sub_cat_code
GROUP BY pci.prod_subcat 
ORDER BY SUM(t.qty DESC);

EDIT:

В MS Access и для уточненного вопроса:

SELECT pci.prod_cat_code, pci.prod_subcat, AVG(t.total_amt)
FROM Transactions as t INNER JOIN
     prod_cat_info as pci
     ON t.prod_cat_code = pci.prod_cat_code AND
        t.prod_subcat_code = pci.prod_sub_cat_code
WHERE pci.prod_cat_code IN (
          SELECT TOP 5 t.prod_cat_code
          FROM Transactions as t
          GROUP BY t.prod_cat_code
          ORDER BY t.qty DESC
         )
GROUP BY pci.prod_cat_code, pci.prod_subcat;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...