基于 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_idjob_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 查询的主要内容,如果未能解决你的问题,请参考以下文章

递归 SQL:使用递归子查询分解的聚合函数

基于同一表上的另一个查询过滤记录的 SQL

Django-ORM-多表操作

具有总记录和分页的单个 SQL 查询

SQL Server 查询以根据用户提供的 id 获取嵌套的子记录

sql查询 如何获取查找某ID的一条记录在表中是第几条记录