использование агрегатной функции в вычисляемом столбце - PullRequest
0 голосов
/ 09 апреля 2019

Попытка использовать sum () для вновь созданного вычисляемого столбца.Имя столбца calc не распознается в функции sum.Вот мой код

select name, is_open,    
       CASE WHEN text like '%perfect%' or '%amazing%' or '%happy%' or '%delicious%'or '%fabulous%'or '%fantastic%'or '%kind%'   THEN 1
            WHEN text like '%hate%'or '%horrible%'or '%bad%'or '%angry%'or '%fantastic%'or '%expensive%'or '%disgusting%' THEN -1
       END sentiment_rating,    
       sum(sentiment_rating) as sum
from review as r left join
     business as b
     on b.id = r.business_id
where is_open is not Null and sentiment_rating is not Null
group by name
order by name ASC

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Нет смысла выбирать как неагрегированный столбец, так и агрегированный столбец.Итак, просто sum() выражение:

select name, is_open,    
       sum(CASE WHEN text like '%perfect%' or text like '%amazing%' or text like '%happy%' or text like '%delicious%' or text like '%fabulous%' or text like '%fantastic%' or text like '%kind%'   THEN 1
                WHEN text like '%hate%' or text like '%horrible%' or text like '%bad%' or text like '%angry%' or text like '%fantastic%'or '%expensive%' or text like '%disgusting%' THEN -1
           END) as sum_sentiment_rating 
from review as r left join
     business as b
     on b.id = r.business_id
where is_open is not Null and sentiment_rating is not Null
group by name, is_open
order by name ASC;

Я не уверен, хотите ли вы одну строку на name или одну строку на name / is_open.Я предположил последнее и добавил is_open к GROUP BY.

0 голосов
/ 09 апреля 2019

Все ваши LIKE условия синтаксически неверны.У вас не может быть:

text like '%perfect%' or '%amazing%'....

правильный синтаксис:

text like '%perfect%' or text like '%amazing%' ....

Затем вы должны суммировать непосредственно по вычисленному столбцу CASE и включить is_open в группировкустолбцы:

select name, is_open,    
  SUM(CASE 
    WHEN text like '%perfect%' or text like '%amazing%' or text like '%happy%' or text like '%delicious%' or text like '%fabulous%' or text like '%fantastic%' or text like '%kind%' THEN 1
    WHEN text like '%hate%' or text like '%horrible%' or text like '%bad%' or text like '%angry%' or text like '%fantastic%' or text like '%expensive%' or text like '%disgusting%' THEN -1
  END) as sumrating
from review as r left join
     business as b
     on b.id = r.business_id
where is_open is not Null and sentiment_rating is not Null
group by name, is_open
order by name ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...