我有一张表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
..任何人都可以帮忙解决这个问题吗?
答案 0 :(得分:3)
您只需将Employee_id
添加到查询中,并将其添加到group by
子句中。 (将其添加到分组中将不会对查询结果产生任何影响,假设每个员工姓名的每个员工ID都是唯一的。)
如果分组确实有所作为,这意味着员工姓名和位置的某些组合具有多个与之关联的ID。因此,您的查询需要决定返回哪个ID,可能使用聚合函数。
答案 1 :(得分: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
答案 2 :(得分:0)
您还可以使用partition by子句并选择要查看的列,而不管您用于聚合的列。
这里有一个非常简短的解释 - Oracle "Partition By" Keyword