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

У меня есть таблица улья со следующими столбцами:

id(primary key) 
user_id (not primary key), 
amount,  
transaction type(+1 or -1) depending on credit or debit. 

Моя цель - суммировать сумму для каждого пользователя (вместе со знаком), а затем создать новый столбец «депозит», который будет иметьзначение «депозит оплачен», если сумма сумм>> 500, и «без депозита», если сумма сумм для пользователя меньше 500.

Ниже мой код:

SELECT user_id, SUM(amount*sign) as amt, CASE WHEN amt>=500 THEN "deposit paid" ELSE "no deposit" END as Deposit
FROM table
GROUP BY user_id

Но я получаю следующую ошибку:

Ошибка семантического исключения 10025, Выражение не в GROUP по ключу «без депозита»

Я могу понять, что ошибка в том, что оператор caseвыполняется сначала, а затем пытается группировать, что приводит к ошибке.

Как я могу решить это. Я пытался поместить таблицу в подзапрос, но не смог.

1 Ответ

0 голосов
/ 07 октября 2019

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

CREATE TABLE #table (id INT,user_id int,amount int,  transactiontype INT)
INSERT INTO #table values (1,1,100,-1);
INSERT INTO #table values (2,1,1000,+1);
INSERT INTO #table values (3,2,100,-1);
INSERT INTO #table values (4,2,500,+1);

;WITH cte as (
SELECT user_id, 
       SUM(amount*transactiontype) as amt
FROM #table
GROUP BY user_id
)
SELECT  c.user_id,
        c.amt,
        CASE WHEN amt>=500 THEN 'deposit paid'  ELSE 'no deposit'  END as Deposit
FROM cte AS c

Это помечает те, у которых есть хотя бы один депозит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...