SQL帮助(针对每个)

SQL帮助(针对每个),sql,Sql,我试图编写一个SQL语句,它需要循环遍历一个部门列表,有点像一个For-Each 这是我到目前为止得到的 SELECT DISTINCT AVG(salary),assigned->name FROM edu_ucla_cs241_termproj_schema.InstructorImpl WHERE assigned->name = 'Anthropology' 这将给我一张桌子 平均工资部 90.15人类学 然而,我想循环每个部门。我可以让这个查询获取一个变量并循环每个部门名

我试图编写一个SQL语句,它需要循环遍历一个部门列表,有点像一个For-Each

这是我到目前为止得到的

SELECT DISTINCT AVG(salary),assigned->name
FROM edu_ucla_cs241_termproj_schema.InstructorImpl
WHERE assigned->name = 'Anthropology'
这将给我一张桌子 平均工资部 90.15人类学

然而,我想循环每个部门。我可以让这个查询获取一个变量并循环每个部门名称吗?

您不能使用

SELECT  AVG(salary),
        assigned->name
FROM edu_ucla_cs241_termproj_schema.InstructorImpl
GROUP BY assigned->name
你不能用吗

SELECT  AVG(salary),
        assigned->name
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担心执行“循环”和满足请求所需的其他步骤)

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

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担心执行“循环”和满足请求所需的其他步骤)

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

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

在大多数数据库中,通过在存储过程中使用游标来循环查询结果。在不知道问题的细节和使用的数据库的情况下,很难建议如何实现所需的功能。

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

如果您想获得所有
分配的->姓名的平均工资,
[我希望这是部门名称],请尝试astander给出的解决方案

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

如果您想获得所有
分配的->名称的平均工资[我希望这是部门名称],请尝试astander给出的解决方案

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

您不需要在SQL中循环。循环是一个过程性的概念,但SQL是声明性的。@Tom:您可以循环游标结果等。这不是推荐的做法,但它是可用的。谢谢你的提示,小马们。就我个人而言,我从来没有使用过游标,因为我手头总是有一种真正的过程语言。您不会在SQL中循环。循环是一个过程性的概念,但SQL是声明性的。@Tom:您可以循环游标结果等。这不是推荐的做法,但它是可用的。谢谢你的提示,小马们。就我个人而言,我从来没有使用过游标,因为我手头一直有一种真正的过程语言。谢谢!这群人帮了大忙。谢谢!这群人帮了大忙。