如何根据另一列获取记录总和?

时间:2014-12-06 16:12:17

标签: mysql sql

我有下表:

JobCode  | Designation | SalaryWithIncrement
----------------------------------------------
JC001 |    IT    | 150,000
JC001 |    IT    | 155,000
JC002 |    Sales | 100,000
JC003 |    HR    | 200,000
JC003 |    HR    | 210,000
JC003 |    HR    | 220,000

必需的输出:

JobCode |   Designation |   SalaryWithIncrement
------------------------------------------------
JC001   |   IT          |   305,000
JC002   |   Sales       |   100,000
JC003   |   HR          |   630,000

以下是我使用的代码,但在分组后我没有获得总计

SELECT JobCode, designation, salaryWithIncrement
FROM table1
group by (JobCode)

感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

您可以使用汇总sum功能:

SELECT   JobCode, designation, SUM(salaryWithIncrement)
FROM     table1
GROUP BY JobCode, designation

答案 1 :(得分:1)

在大多数情况下,当您有此类要求时,请使用具有SQL聚合功能的GroupBY实现 根据您想要的记录对字段进行分组,例如JobCodedesignation 您可以在MSDN

了解Group BY
SELECT JobCode,designation,SUM(salaryWithIncrement)
FROM  Job GROUP BY JobCode,designation

以下是您的示例工作代码SQL Fiddle

答案 2 :(得分:1)

为此,您必须在sum语句中使用group by函数。

select jobCode, designation, sum(salaryWithInc) from Job group by jobCode;

选中此link以查看有效的示例。

在我看来,您必须对表进行不同的重构,以避免数据冗余(jobCodedesignation)。为此,您可以有两个表,一个包含jobCodedesignation,另一个包含salaryWithInc

create table Job (jobId int auto_increment, jobCode varchar(5), designation varchar(25), primary key (jobId));
create table Salary (job int, salaryWithInc decimal(5,2), foreign key (job) references Job (jobId));
insert into Job (jobCode, designation) values ("JC001", "IT"),("JC002", "Sales"), ("JC003", "HR");
insert into Salary values (1,150.00), (1,155.00),(2,100.00),(3,200.00),(3,210.00),(3,220.00);

在这种情况下,您使用此查询来获取所需的结果:

select J.jobCode, J.designation, sum(S.salaryWithInc) from Job as J join Salary as S on J.jobId=S.job group by (J.jobId);

选中此link以查看有效的示例。

希望它有用!