【问题标题】:SQL nested sum querySQL 嵌套求和查询
【发布时间】:2017-04-20 08:03:31
【问题描述】:

我有一个名为 agent 的 SQL 表,如下所示:

数据中声称某些代理人的薪水高于他们所监管的代理人的总和。 我编写了以下 SQL 查询来检索代理人的姓名、他们的个人工资以及他们在下面监督的人员的工资总和。 只有个人工资大于60000的代理才需要显示。

SELECT Agent.Agentname AS ["Supervisor Name"],  Agent.Salary, 
  (SELECT  SUM(Agent.salary) FROM Agent
   WHERE Agent.Supervisor IS NOT NULL
   GROUP BY Agent.Supervisor;) 
AS ['Sum of Subordinate Salaries']
FROM Agent
WHERE (((Agent.[Supervisor]) Is Not Null) AND ((Agent.[salary])>=60000))
GROUP BY Agent.AgentName

我收到一条错误消息,提示“您的查询不包含作为聚合函数的一部分的指定表达式 'salary'”。

如何纠正查询并从中获得所需的结果?

【问题讨论】:

  • 当在一个查询中多次使用同一个表时,使用表别名来限定 colmuns - 使其更清晰。
  • @jarlh 我已经这样做了,但是仍然出现同样的错误。
  • 工资既没有汇总也没有在group by...这是问题
  • 我没有看到表别名...

标签: sql ms-access group-by sum


【解决方案1】:
 create table #agent (agentno varchar(5),agentname varchar(30),functn varchar(10),supervisor varchar(30),salary int)

Insert into #agent values('A1','Jacobson','Manager','O1',120000), ('A2','Patel','Sales','A1',25000),('A3','Clark','Sales','A1',30000),
('A4','Mabaso','Admin','A1',35000),('B1','Letele','Manager','O1',100000), ('B2','Smit','Sales','B1',35000),    ('B3','Ho','Sales','B1',30000),
('B4','Kruger','Admin','B1',40000),('C1','Mohd','Manager','O1',80000),('C2','Visser','MandR','C1',58000),
('C3','Davie','Admin','C1',42000),('C4','Nakosi','MandR','C1',60000),('C5','Lai','Admin','C4',38000)

select sup.agentname as supervisor_name ,SUM(agn.salary) as subordinate_salary_sum,sup.salary as supervisor_salary
from #agent agn
inner join #agent sup
on agn.supervisor=sup.agentno 
where agn.salary>=60000
group by sup.agentname,sup.salary

当使用 group by 时,select 语句中的列应该与 group by 语句一起出现,或者应该在一个聚合函数中。在您的查询中,agent.salary 应该在 group by 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多