基于 ID 聚合记录的 SQL 查询
Posted
技术标签:
【中文标题】基于 ID 聚合记录的 SQL 查询【英文标题】:SQL query to aggregate records based on ID 【发布时间】:2016-01-25 18:21:55 【问题描述】:SQL 中是否有一种方法可以首先从表中选择记录并聚合它,然后将其插入到另一个表中?例如,这是给定的表。
[account_id] | [job_role_id] | [薪水] 1 1 10,000
1 2 10,000
1 3 10,000
1 20,000
1 2 10,000
2 3 10,000
2 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 20,000
2 2 20,000
2 3 20,000
请原谅我的英语不好,因为我现在睡眠不足,英语是我的第二语言。
【问题讨论】:
【参考方案1】:是的,您可以首先提出您的选择语句,您希望基于account_id
和job_role_code
聚合salary
。您可以使用以下方法来做到这一点:
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;
这只会有效运行一次。如果您需要再次运行它,您需要在尝试再次执行SELECT INTO...
之前截断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;
【讨论】:
非常感谢。另外,有没有办法在新列中显示正在聚合的记录数?再次感谢您。 是的,添加Count(1) as num_agged
。我将修改我的答案以将其包含在附加查询中。
非常感谢。看完就可以睡觉了哈哈。【参考方案2】:
您需要在此处使用GROUP BY
。
SELECT account_id, job_role_id, SUM(salary)
FROM jobs
GROUP BY account_id, job_role_id;
【讨论】:
谢谢。很有帮助。以上是关于基于 ID 聚合记录的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章