如何获取所有列,但必须在sql查询中只分组2列

时间:2013-04-03 10:22:21

标签: sql oracle

我有一张表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 ..任何人都可以帮忙解决这个问题吗?

3 个答案:

答案 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