当前位置: 首页 > 知识库问答 >
问题:

在SQL查询中使用GROUP BY的问题

卫飞
2023-03-14

我试图在MS SQL Server中编写一个propper SQL查询。首先,我有以下表格:城镇,员工,地址。几乎每个员工都有Manager,ManagerID也是员工的外键。(自我关系)。我的目标是显示每个镇的经理人数。到目前为止,我有以下代码:

SELECT t.Name, COUNT(*) AS [Managers from each town] 
FROM Towns t
JOIN Addresses a
ON t.TownID = a.TownID
JOIN Employees e
ON a.AddressID = e.AddressID
GROUP BY t.Name
ORDER BY [Managers from each town] DESC
SELECT t.Name, COUNT(*) AS [Managers from each town] 
FROM Towns t
JOIN Addresses a
ON t.TownID = a.TownID
JOIN Employees e
ON a.AddressID = e.AddressID
JOIN Employees m
ON e.ManagerID = m.ManagerID

GROUP BY t.Name
ORDER BY [Managers from each town] DESC
Town          | Managers from each town
Issaquah      | 3
Kenmore       | 5
Monroe        | 2
Newport Hills | 1

共有1个答案

陆和泰
2023-03-14

如果我正确理解您的结构,那么员工是经理的唯一指示是其id是否被用作其他员工的managerid。您的第一个查询已经正确地显示了计数,然后所需要的就是用以下内容筛选结果:

where EmployeeID in (select ManagerID from Employees)

因此,将第一个查询转换为:

SELECT t.Name, COUNT(*) AS [Managers from each town] FROM Towns t
JOIN Addresses a
ON t.TownID = a.TownID
JOIN Employees e
ON a.AddressID = e.AddressID
where EmployeeID in (select ManagerID from Employees)
GROUP BY t.Name
ORDER BY [Managers from each town] DESC
 类似资料:
  • 我有下面的模式, 学生(名字、姓氏、SID) 已注册(学生ID、课程ID) 课程(CID、课程名称、系) 我需要找出哪些学生上的课比课多。和位位于类别中。我有以下查询,其中列出了所有注册课程的学生以及他们注册了多少课程。 不太确定如何将这个数字与那些注册信息技术课程的人进行比较。

  • 1)使用的第一个查询...大约用了23秒 目前我修改了查询..这需要大约9秒 我不确定要做的表演是什么?我希望这个查询是快速的..我尝试索引rid和id,但这仍然使查询变得更糟。 下面是表格的详细信息 mza_movie_upload MZA_Movie_Statics

  • 我有一个API调用,它需要从MySQL数据库中提取一些信息,以便完成请求。问题是,NodeJS不会等待查询响应,我已经尝试用承诺来解决这个问题。下面是我的代码: 这个函数将返回Promise对象,这将触发SQL语法错误,因为这不是预期的数据库输入。我做错了什么?任何建议都非常感谢。

  • 我对雄辩有一个奇怪的问题,我试图做到以下几点: Laravel Framework报告一个错误: Connection.php第761行中的QueryException:SQLSTATE[42000]:语法错误或访问冲突:1055“permission.id”不在GROUP BY中(SQL:选择,作为,

  • 我试图使用JDBC从Filemaker中选择一个具有特殊字符的列。我看到过其他一些帖子,里面有空格或其他特殊字符,我也试着引用我的专栏文章,但问号带来了另一个纠结,因为JDBC驱动程序似乎试图绑定到它。 给我

  • 我希望通过登录搜索员工列表,并使用扩展的DAO接口: 在我的服务层中,我用