2016-01-21 5 views
0

я следующие отношений в моей базе данных,PostgreSQL: Получение суммы значений аналогичных идентификаторов отчетливо

 id | month | balance | 
-----------+------------+---------+ 
0009gmail | 2016-01-01 | 2000 | 
0009gmail | 2016-02-01 | 3500 | 
0009gmail | 2016-03-01 |  800 | 
0009gmail | 2016-04-01 | 1400 | 
0009gmail | 2016-05-01 | -500 | 

Проблема, я хочу, сумму баланса отчетливого ид с наличием даты меньше указанной датой,

Я использую этот запрос для такой:

select distinct(id),sum(balance) from payment group by id,month having month<'2016-06-22'; 

но дает этот результат,

 id | sum 
-------------+--------- 
    0009gmail | 2000 
    0009gmail |  800 
    0009gmail | 1400 
    0009gmail | 3500 
    0009gmail | -500 

Я думаю, что я получаю этот результат из-за сдачи месяца в группе по статье, но удаление же выдает ошибку, что месяц должен быть в любой группе из функции агрегации, я хочу этот вывод,

 id | sum 
----------+--------- 
0009gmail | 7200 

пожалуйста, помогите ..

ответ

0

Использовать простой агрегации с помощью id:

SELECT id, SUM(balance) AS balance 
FROM payment 
WHERE month<'2016-06-22' 
GROUP BY id; 

LiveDemo

enter image description here

Изображение из: http://social.technet.microsoft.com/wiki/contents/articles/20724.all-at-once-operations-in-t-sql.aspx

  1. Получить строки из таблицы payement
  2. Фильтр только те, которые удовлетворяют month<'2016-06-22'
  3. GROUP BY ID
  4. не
  5. (HAVING) Нет необходимости
0

Вы ищете статьи where:

select id, sum(balance) 
from payment 
where month < '2016-06-22' 
group by id; 

Я нахожу забавным неразбериха. Большинство людей пытаются поставить логику having в предложение where (функции агрегации не разрешены в статьях where). Очень редко можно увидеть ошибку в другом направлении.

Также обратите внимание, что select distinct почти никогда не подходит в запросе агрегации.

+0

Если есть еще одна запись с id 0009hotmail ...? –

+0

Итак, группа, группирующая все индивидуальные идентификаторы, правильно ...? –

+0

'group by' производит одну строку для каждой комбинации ключей в разделе' group by', с итогами, рассчитанными в 'select'. –

Смежные вопросы