员工表:
ID Name Date Active Salary
1 A 1/04 1 2000
2 B 1/04 0 2000
3 C 3/05 1 4000
4 A 5/05 1 4000
5 B 16/05 1 9000
6 A 2/05 1 3000
7 D 3/08 0 12000
所需输出#1:这是每个名字所有记录的总和和数。
Name Count Salary
A 3 9000
B 2 11000
C 1 4000
D 1 12000
所需输出#2:这是所有记录的总和,但每个名称只有活动记录的数量。
Name Count Salary
A 3 9000
B 1 11000
C 1 4000
D 0 12000
答案 0 :(得分:2)
这里提供了一些一般性建议,足以引导您找到解决方案而无需为您完成所有工作。
现在我想我应该假设你知道这一点,但是,如果你是完整的初学者,你可以从表格中选择某些类似的列(可能在任何订单):
sql> select name, salary from employees
A 2000
B 2000
C 4000
A 4000
B 9000
A 3000
D 12000
您还可以使用where
子句过滤数据中的某些行,例如仅获得工资为4000或更低的那些行(同样,不保证订单):
sql> select name, salary from employees
...> where salary <= 4000
A 2000
B 2000
C 4000
A 4000
A 3000
您可以根据常用条件将行组合在一起,例如获取最早的&#34;每个可能的工资值的名称,但也包括组成该组的每一行的计数(例如,2000
工资有两行,9000
有一行):
sql> select min(name), count(*), salary from employees
...> group by salary
A 2 2000
A 2 4000
A 1 3000
B 1 9000
D 1 12000
您只需要获得所需的结果,您只需要以稍微不同的方式应用这些知识:
name
和salary
信息,您就没有兴趣展示日期或有效旗帜; name
,计数行的每一行;和这应该足以让你继续,只要你意识到我没有在上面加粗这些词,因为我喜欢玩不同的字体属性: - )
由于现在已经过了足够的时间来判断这是否属于课堂作业,请参阅以下架构设置和查询以提供您想要的内容:
create table empl (
id integer,
name varchar(20),
dt date,
actv integer,
sal integer);
insert into empl(id,name,dt,actv,sal) values (1,'A','4/01/2015',1, 2000);
insert into empl(id,name,dt,actv,sal) values (2,'B','4/01/2015',0, 2000);
insert into empl(id,name,dt,actv,sal) values (3,'C','5/03/2015',1, 4000);
insert into empl(id,name,dt,actv,sal) values (4,'A','5/05/2015',1, 4000);
insert into empl(id,name,dt,actv,sal) values (5,'B','5/16/2015',1, 9000);
insert into empl(id,name,dt,actv,sal) values (6,'A','5/02/2015',1, 3000);
insert into empl(id,name,dt,actv,sal) values (7,'D','8/03/2015',0,12000);
select name,
count(1) as count,
sum(sal) as salary
from empl
group by name
根据需要提供:
name count salary
---- ----- ------
A 3 9000
B 2 11000
C 1 4000
D 1 12000
这涵盖了你的第一个案例。你的第二种情况有点棘手,因为你希望每个名字的所有工资总和,但你只想计算活动记录。这可以通过自加入子查询来完成:
select e1.name,
(select count(1)
from empl e2
where e2.name = e1.name
and e2.actv = 1) as count,
sum(e1.sal) as salary
from empl e1
group by name
通过这个稍微修改过的查询,您得到:
name count salary
---- ----- ------
A 3 9000
B 1 11000
C 1 4000
D 0 12000