2

我有一个表Employees,它的字段如下:

Employee_name,Employee_id,Employee_status,Employee_loc,last_update_time.

该表没有任何约束。我已经尝试了以下查询。

select Employee_name, count(1) 
from Employees 
where Employee_status = 'ACTIVE' 
Group by Employee_name,Employee_loc 
having count(Employee_name) > 1 
order by count(Employee_name)  desc

在选择中,我也需要获得Employee_id.. 任何人都可以帮助您如何获得它吗?

4

3 回答 3

4

您可以只添加Employee_id到查询中,也可以将其添加到group by子句中。(将其添加到分组中不会对查询结果产生任何影响,假设每个员工姓名每个员工 id 都是唯一的)。

如果分组确实产生了影响,则意味着员工姓名和位置的某些组合具有多个关联的 ID。因此,您的查询需要决定返回哪个 ID,可能使用聚合函数。

于 2013-04-03T10:27:43.960 回答
1
SELECT EMPLOYEE_NAME, EMPLOYEE_ID, COUNT(1)
FROM
EMPLOYEES
WHERE
EMPLOYEE_NAME IN
(
SELECT EMPLOYEE_NAME
FROM EMPLOYEES
WHERE Employee_status = 'ACTIVE'
GROUP BY Employee_name,Employee_loc
HAVING COUNT(*) > 1
)
GROUP BY EMPLOYEE_NAME, EMPLOYEE_ID
于 2013-04-03T10:28:23.020 回答
0

您还可以使用 partition by 子句并选择要查看的任何列,而与用于聚合的列无关。

这里有一个非常简短的解释 - Oracle“Partition By”关键字

于 2015-10-01T17:06:30.313 回答