使用select和GROUPBY的SQL
我对代码没有问题,但是,我想显示经理的名字和姓氏,而不是经理的id,但是如果我这样做,我会得到错误: “列'employees.first_name'无效…未包含在聚合函数或group by子句中”。我尝试将first_name和last_name添加到group by,输出为空。也尝试了自我加入。。我想不出答案。 查询内容包括:员工id、姓名、姓氏、经理id 上面的查询显示:使用select和GROUPBY的SQL,sql,sql-server,Sql,Sql Server,我对代码没有问题,但是,我想显示经理的名字和姓氏,而不是经理的id,但是如果我这样做,我会得到错误: “列'employees.first_name'无效…未包含在聚合函数或group by子句中”。我尝试将first_name和last_name添加到group by,输出为空。也尝试了自我加入。。我想不出答案。 查询内容包括:员工id、姓名、姓氏、经理id 上面的查询显示: SELECT manager_id, COUNT(manager_id) FROM employees GROUP B
SELECT manager_id, COUNT(manager_id)
FROM employees
GROUP BY manager_id
HAVING COUNT(manager_id) > 3
我想:
manager_id (No column name)
100 14
120 8
121 8
122 8
123 8
124 8
145 6
146 6
147 6
148 6
149 6
注意计数(1)与计数(*)相同,但在服务器上的工作量稍小 我假设某个地方有一个管理器表?向我们显示您尝试的失败查询。我假设您使用的是
sql server
,而不是mysql
。无论哪种方式,请显示示例数据和预期结果。这都不会产生任何结果:从员工e1中选择e1.first\u name,e1.last\u name在e1.manager\u id=e2.employee\u id组中加入员工e2。按e1.manager\u id分组,e1.first\u name,e1.last\u name有计数(e2.employee\u id)>3是,我使用的是sql Server假设我理解了您的表结构和示例数据,那么您的查询看起来非常接近(尽管没有完整的示例数据和预期结果,但仍然有些猜测)。将join
标准中上的中的e1
和e2
中的列反转,这样可能会起作用。这里有一个浓缩的提琴:count(1)与count(*)相同,但在服务器上的工作量稍微少一些
有关于这个的参考吗?@Squirrel,我在谷歌上搜索了一下,看起来差异已经被优化掉了——在过去,它可以节省到Columns表的时间。
first_name last_name
Bob Smith
SELECT ISNULL(m.name, 'None') AS ManagerName, COUNT(1)
FROM employees e
LEFT JOIN employees m
on e.manager_id = e.employee_id
GROUP BY ISNULL(m.name, 'None')
HAVING COUNT(1) > 3