По каким категориям средний доход выше общего среднего - PullRequest
0 голосов
/ 07 января 2020

Как мне пройти условие больше чем? Я получаю сообщение об ошибке, так как неверное имя столбца «среднее».

Вот мой код:

SELECT P.prod_cat, AVG(total_amt) AS average 
FROM Transactions T JOIN 
     prod_cat_info P 
     ON T.prod_cat_code = P.prod_cat_code
WHERE average > AVG(total_amt)
GROUP BY prod_cat

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Поскольку вы пытаетесь сравнить все строки с одним значением, вы должны убедиться, что вы получаете это единственное значение только один раз. Следующий код имел приличную производительность в одной из моих больших локальных баз данных (имена таблиц были изменены, чтобы защитить невинных):

WITH CTE_Overall_Avg AS (SELECT AVG(total_amt) AS overall_avg FROM Transactions)
SELECT
    TX.prod_cat,
    AVG(TX.total_amt) AS prod_cat_avg,
    MAX(OA.overall_avg) AS overall_avg
FROM
    Transactions TX
INNER JOIN CTE_Overall_Avg OA ON 1 = 1
GROUP BY
    TX.prod_cat
HAVING
    AVG(TX.total_amt) > OA.overall_avg
0 голосов
/ 07 января 2020

Исходя из названия вашего вопроса, я думаю, что вы хотите:

SELECT p.prod_cat, AVG(t.total_amt) AS average 
FROM (SELECT t.*, AVG(t.total_amt) OVER () as overall_average
      FROM Transactions T
     ) t JOIN
     prod_cat_info P 
     ON T.prod_cat_code = P.prod_cat_code
GROUP BY p.prod_cat, overall_average
HAVING AVG(t.total_amt) > overall_average;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...