SQL帮助(每个)

时间:2009-12-02 07:16:52

标签: sql

我正在尝试编写一个需要循环遍历部门列表的SQL语句,有点像For Each。

到目前为止我所拥有的。

SELECT DISTINCT AVG(salary),assigned->name
FROM edu_ucla_cs241_termproj_schema.InstructorImpl
WHERE assigned->name = 'Anthropology'

这会给我一张表     平均薪资部     90.15人类学

但是,我想遍历每个部门。我可以使此查询采用变量并遍历每个部门名称吗?

5 个答案:

答案 0 :(得分:3)

你能否使用

SELECT  AVG(salary),
        assigned->name
FROM edu_ucla_cs241_termproj_schema.InstructorImpl
GROUP BY assigned->name

答案 1 :(得分:3)

SELECT  assigned->name, AVG(salary)
FROM edu_ucla_cs241_termproj_schema.InstructorImpl
GROUP BY assigned->name

您还可以获得更多信息,如

SELECT  assigned->name, COUNT(*) AS NbEmployees, AVG(salary) AS AvSalary, 
        MIN(salary) AS MinSalary, MAX(salary) AS MaxSalary
FROM edu_ucla_cs241_termproj_schema.InstructorImpl
GROUP BY assigned->name

您对变量 [通过部门循环]的请求/建议“表示您在程序(命令性)编程语言方面的思考。虽然SQL或SQL扩展支持这种编程范例,但你会发现 SQL在以声明方式使用时更强大(与上面的查询一样:你“声明”你想要的东西,并让SQL担心执行“循环”和完成请求所需的其他步骤

答案 2 :(得分:0)

如果您想要所有记录的平均工资和每条记录的名称列的列表,您需要使用2个单独的查询

答案 3 :(得分:0)

通过在存储过程中使用游标,在大多数数据库中循环查询结果。在不知道问题的具体细节和使用中的数据库的情况下,很难建议如何实现您想要的内容。

答案 4 :(得分:0)

如果您想获得所有assigned->name [我希望这是部门名称]的平均薪水,那么请尝试由旁观者提供的解决方案

SELECT assigned->name,AVG(salary)
FROM edu_ucla_cs241_termproj_schema.InstructorImpl    
GROUP BY assigned->name

否则,如果你想获得某些部门的平均工资,那么你必须动态创建查询,如下所示:

SELECT assigned->name,AVG(salary)
FROM edu_ucla_cs241_termproj_schema.InstructorImpl
WHERE assigned->name in ( 'name1', 'name2' ... )
GROUP BY assigned->name