#mysql #sql #sum #subquery #having-clause
#mysql #sql #сумма #подзапрос #having-предложение
Вопрос:
Я хочу запросить таблицу, которая выглядит следующим образом:
customer_id (INT), transaction_date (ДАТА), доход (INT)
Я пытаюсь создать таблицу, в которой отображается сумма дохода на отдельный customer_id, за исключением клиентов, которые совершали транзакции ТОЛЬКО в 2014 году.
Мой запрос:
SELECT DISTINCT(customer_id) AS a_customer_id, sum( case when (SELECT YEAR(transaction_date) FROM table__ WHERE customer_id = a_customer_id) != ('2014') then income else 0 end) AS sum_income FROM table__ GROUP BY a_customer_id ORDER BY sum_income DESC;
Ошибка, которую я получаю, — «Неизвестный столбец a_customer_id
«. Как мне сослаться в подзапросе на псевдоним, созданный в первом запросе?
Комментарии:
1. подзапрос возвращает более одного результата, что является основной причиной, по которой ваш запрос sib не работает, кроме того, вы не можете использовать псевдоним в этой позиции
Ответ №1:
Ваш запрос не является допустимым SQL. Судя по описанию вашего вопроса, вам, похоже, нужна агрегация и having
предложение:
select customer_id, sum(income) sum_income
from mytable
group by customer_id
having max(year(transaction_date ) <> 2014) = 1
Это дает вам общее income
количество по клиентам, отфильтровывая клиентов, у которых были транзакции только в 2014 году.