admin 管理员组

文章数量: 887021


2024年1月16日发(作者:radiogroup选中状态监听接口)

oraclegroupby后取不为空的一条记录

在Oracle中,使用GROUP BY子句可以将查询结果按照指定的列进行分组,并对每个组进行聚合操作。然而,有时我们需要在分组后只选择其中不为空的一条记录。下面是一种实现这个需求的方法。

假设我们有一个名为"employees"的表,包含以下列:employee_id、first_name、last_name和salary。我们想要按照last_name对员工进行分组,并且只选择每个组中salary不为空的一条记录。以下是实现该需求的步骤:

1. 使用GROUP BY子句将员工按照last_name进行分组,并计算每个组中的记录数和最小salary。

```sql

SELECT last_name, COUNT(*) AS count, MIN(salary) AS

min_salary

FROM employees

GROUP BY last_name;

```

2. 使用HAVING子句筛选出count大于0(即至少有一条记录)且min_salary不为空的分组。

```sql

SELECT last_name, count, min_salary

FROM

SELECT last_name, COUNT(*) AS count, MIN(salary) AS

min_salary

FROM employees

GROUP BY last_name

HAVING count > 0 AND min_salary IS NOT NULL

```

3.使用ROW_NUMBER(函数为每个分组的记录进行编号,并按照编号升序排序。

```sql

SELECT last_name, count, min_salary

FROM

SELECT last_name, count, min_salary, ROW_NUMBER( OVER

(PARTITION BY last_name ORDER BY min_salary) AS rn

FROM

SELECT last_name, COUNT(*) AS count, MIN(salary) AS

min_salary

FROM employees

GROUP BY last_name

HAVING count > 0 AND min_salary IS NOT NULL

WHERE rn = 1;

```

在上述查询中,我们使用了嵌套查询来实现筛选出不为空的分组,并使用ROW_NUMBER(函数为每个分组的记录进行编号。最后,我们选择编号为1的记录,即每个分组中的不为空的一条记录。


本文标签: 分组 进行 记录 编号 实现