select- 在 plsql 中加入 having 和 group by

select- join having and group by in plsql

我想要在 'Furniture' 部门工作过的员工人数 我有两张桌子 1.department dept_id dept_name 100 , 服装, 200 , 家具,

2.sales emp_id , sales_amt , dept_id

我已经这样做了..但是没有显示任何结果。

select count(emp_id) from department a join sales b on a.dept_id = b.dept_id group by dept_id having dept_name='furniture';

我知道我可以用这个(我知道家具 dept_id=200):

select count(emp_id) from sales group by dept_id having dept_id=200;

但我想知道第一个代码中的问题是什么。

HAVING用于在聚合发生后过滤行。
分解你的代码:

select count(emp_id)
from department a 
join sales b on a.dept_id = b.dept_id 
group by a.dept_id 

此 SQL 代码仅 returns 一个 table 结果只有 1 列,即员工人数 (count(emp_id))。以下 HAVING 子句 (having dept_name='furniture') 找不到 dept_name 列,这会导致错误。

通过更改所选列,以下 SQL 代码可以工作(取决于您的 RDBMS):

select count(emp_id), dept_name
from department a 
join sales b on a.dept_id = b.dept_id 
group by a.dept_id 
having dept_name= 'furniture'

或使用 dept_id = 200 条件

select count(emp_id), a.dept_id
from department a 
join sales b on a.dept_id = b.dept_id 
group by a.dept_id 
having a.dept_id = 200