SQL 查询以根据 ID 聚合记录

SQL query to aggregate records based on ID

在 SQL 中有没有办法首先从 table 记录 select 并将其聚合,然后将其插入另一个 table?例如,这是给定的 table.

[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

请原谅我的英语不好,因为我现在睡眠不足,英语是我的第二语言。

是的,您可以首先提出 select 语句来做到这一点,您希望根据 account_idjob_role_code 聚合 salary。您可以使用以下方法做到这一点:

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

下一步是将其插入其他 table 以永久保存此数据。我们可以这样修改select:

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;

这只会对 运行 有效一次。如果您需要再次 运行 它,您需要在尝试再次执行 SELECT INTO... 之前 t运行 分类来自 job_salary_aggregate_table 的数据。

根据要求,追加计数:

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;

您需要在此处使用 GROUP BY

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