用于根据ID

时间:2016-01-25 18:21:55

标签: mysql sql oracle fact-table

SQL中有没有办法首先从表中选择记录并将其聚合然后将其插入到另一个表中?例如,这是给定的表。

[ account_id ] | [ job_role_id ] | [薪水]
    1 1 10,000

1 2 10,000

1 3 10,000

1 1 20,000

1 2 10,000

2 3 10,000

2 1 20,000

2 2 20,000

2 3 10,000

我需要以这样的方式聚合记录,即以下列方式添加account_id给出的相同job_role_id的所有工资:

[ account_id ] | [ job_role_id ] | [薪水]
    1 1 30,000

1 2 20,000

1 3 20,000

2 1 20,000

2 2 20,000

2 3 20,000

请原谅我的英语不好,因为此时我的睡眠非常困难,英语是我的第二语言。

2 个答案:

答案 0 :(得分:0)

是的,您可以先提出您的select语句,然后根据salaryaccount_id汇总job_role_code。您可以使用以下方法执行此操作:

SELECT account_id, job_role_id, Sum(salary) as salary
FROM job_table
GROUP BY account_id, job_role_id;

下一步是您要将其插入到其他表中以永久保存此数据。我们可以像这样修改选择:

INSERT INTO job_salary_aggregate_table (account_id, job_role_id, salary)
SELECT account_id, job_role_id, Sum(salary) as salary
FROM job_table
GROUP BY account_id, job_role_id;

这只能运行一次。如果您需要再次运行它,则需要在尝试再次执行job_salary_aggregate_table之前截断SELECT INTO...中的数据。

根据要求,额外计数:

INSERT INTO job_salary_aggregate_table (account_id, job_role_id, salary, num_agged)
SELECT account_id, job_role_id, Sum(salary) as salary, Count(1) as num_agged
FROM job_table
GROUP BY account_id, job_role_id;

答案 1 :(得分:0)

你想在这里使用GROUP BY

SELECT account_id, job_role_id, SUM(salary)
FROM jobs
GROUP BY account_id, job_role_id;