我正在尝试编写一个需要循环遍历部门列表的SQL语句,有点像For Each。
到目前为止我所拥有的。
SELECT DISTINCT AVG(salary),assigned->name
FROM edu_ucla_cs241_termproj_schema.InstructorImpl
WHERE assigned->name = 'Anthropology'
这会给我一张表 平均薪资部 90.15人类学
但是,我想遍历每个部门。我可以使此查询采用变量并遍历每个部门名称吗?
答案 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