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的记录,即每个分组中的不为空的一条记录。
版权声明:本文标题:oraclegroupby后取不为空的一条记录 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1705353748h482300.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论