Две разные группы по предложениям в одном запросе? - PullRequest
1 голос
/ 24 февраля 2011

Первый раз здесь пишу, новичок в SQl, и я не совсем уверен, как это сказать, но постараюсь.

У меня есть запрос:

select report_month, employee_id, split_bonus,sum(salary) FROM empsal
where report_month IN('2010-12-01','2010-11-01','2010-07-01','2010-04-01','2010-09-01','2010-10-01','2010-08-01') 
AND employee_id IN('100','101','102','103','104','105','106','107')
group by report_month, employee_id, split_bonus;

Теперь к результату этого запроса я хочу добавить новый столбец split_bonus_cumulative , который по существу эквивалентен добавлению sum (split_bonus) в предложении select, но для этого случаяГрупповая покупка должна иметь только report_month и employee_id.

Может кто-нибудь показать мне, как это сделать с помощью одного запроса?Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 08 мая 2011

Если вы используете Postgres, вам также могут пригодиться оконные функции:

http://www.postgresql.org/docs/9.0/static/tutorial-window.html

Если я не ошибаюсь, вам нужно что-то похожее на следующее:

select report_month, employee_id, salary, split_bonus,
       sum(salary) over w as sum_salary,
       sum(split_bonus) over w as sum_bonus
from empsal
where ...
window w as (partition by employee_id);

CTE также удобны:

http://www.postgresql.org/docs/9.0/static/queries-with.html

WITH
rows as (
SELECT foo.*
FROM foo
WHERE ...
),
report1 as (
SELECT aggregates
FROM rows
WHERE ...
),
report2 as (
SELECT aggregates
FROM rows
WHERE ...
)
SELECT *
FROM report1, report2, ...
3 голосов
/ 24 февраля 2011

Попробуйте:

SELECT
  report_month, 
  employee_id, 
  SUM(split_bonus), 
  SUM(salary) 
FROM 
  empsal
WHERE 
  report_month IN('2010-12-01','2010-11-01','2010-07-01','2010-04-01','2010-09-01','2010-10-01','2010-08-01')
AND 
  employee_id IN('100','101','102','103','104','105','106','107')
GROUP BY 
  report_month, 
  employee_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...