sql - 如何正确编写此查询?
问题描述
如何编写一个查询,提供国家名称、城市、邮政编码、街道地址和至少有 2 名员工工作的部门数量?以下是我编写的查询,但由于查询,我得到“不是 GROUP BY 表达式”错误。
SELECT k.COUNTRY_NAME,
l.CITY,
l.POSTAL_CODE,
l.STREET_ADDRESS,
e.DEPARTMENT_ID,
COUNT(EMPLOYEE_ID)
FROM hr.employees e
JOIN hr.departments c
ON (c.DEPARTMENT_ID = e.DEPARTMENT_ID)
JOIN hr.locations l
ON (c.LOCATION_ID = l.LOCATION_ID)
JOIN hr.countries k
ON (k.COUNTRY_ID = l.COUNTRY_ID)
GROUP BY e.DEPARTMENT_ID
HAVING COUNT(EMPLOYEE_ID) > 2;
解决方案
您将首先获得至少有 2 名员工的所有部门的集合,如下所示(atleast_two)
之后,您会将数据与查询的其余部分连接起来,并提取感兴趣的属性。
with atleast_two
as (select c.DEPARTMENT_ID
,count(employee_id) as cnt_employees
from hr.employees e
join hr.departments c
on (c.DEPARTMENT_ID=e.DEPARTMENT_ID)
group by c.deptid
having count(employee_id)>2
)
select k.COUNTRY_NAME
, l.CITY
, l.POSTAL_CODE
, l.STREET_ADDRESS
, e.DEPARTMENT_ID
, c.cnt_employees
from hr.employees e
join atleast_two c
on (c.DEPARTMENT_ID=e.DEPARTMENT_ID)
join hr.locations l
on (c.LOCATION_ID=l.LOCATION_ID)
join hr.countries k
on (k.COUNTRY_ID=l.COUNTRY_ID);
推荐阅读
- xslt - 如何从文本节点中去除尾随句号(句点)
- javascript - 如何对数组进行排序,以便在第一个位置获得特定值?
- mercurial - 如何启用 Mercurial 主题(它是否是“实时”功能)?
- python - 循环不使用 Selenium 迭代,for 循环遍历列表
- javascript - 用于移动问题的 Swiper 初始化脚本
- qt - 如何设置突出显示始终适合它的 ListView
- r - 使用多个数据框绘制多条线时从 ggplot 中省略 NA 值
- bash - lftp bash 脚本文件意外结束
- php - WooCommerce:包含 php 文件的函数未在正确的时间执行
- code-first - AWS-CDK Appsync Codefirst 输入类型