oracle - SQL Top 5 和其他的
问题描述
我想选择前 5 行和另外一个名为 Others 的第 6 行,并聚合其余部分。
使用 Anzahl 作为 (SELECT NVL (parse_listener_log_line (connect_string, 'HOST'), 'n/a') host, COUNT(*) cnt FROM listener_log WHERE ID_MANDANT = :P100_MANDANT AND ID_SERVER = :P100_SERVER GROUP BY parse_listener_log_line (connect_string, 'HOST') ) ORDER BY cnt DESC), client as (select case when rownum > 4 then 'Others' else host end as client, cnt FROM Anzahl) SELECT client, cnt FROM client;
客户端 CNT jdbc 118553 server2 106170 server1 101710 server4 13370 其他 8734 其他 1760 其他 1365 其他 1058
解决方案
一些分析函数 ( row_number
) 以及集合操作 ( union
) 可能会满足您的需求。
Scott 的 EMP 表包含以下数据:
SQL> select ename, sal from emp order by sal desc;
ENAME SAL
---------- ----------
KING 5000
FORD 3000
SCOTT 3000
JONES 2975
BLAKE 2850
CLARK 2450
ALLEN 1600
TURNER 1500
MILLER 1300
WARD 1250
MARTIN 1250
ADAMS 1100
JAMES 950
SMITH 800
14 rows selected.
现在:找到每一行的序数(使用row_number
)并将前 5 行(将它们中的每一行都按原样)与包含汇总工资的第六行合并:
SQL> with temp as
2 (select ename,
3 sal,
4 row_number() over (order by sal desc) rn
5 from emp
6 )
7 select rn,
8 ename,
9 sal
10 from temp
11 where rn <= 5
12 union all
13 select 6,
14 'Other',
15 sum(sal)
16 from temp
17 where rn > 5
18 order by rn;
RN ENAME SAL
---------- ---------- ----------
1 KING 5000
2 SCOTT 3000
3 FORD 3000
4 JONES 2975
5 BLAKE 2850
6 Other 12200
6 rows selected.
SQL>
推荐阅读
- whatsapp - Whatsapp API 无法在桌面和 PHP 页面上运行
- scala - 为什么akka http可以使用方法路径而不扩展特征?
- android - 恢复片段时,轴上的 MPAndroidChart LineChart 标签消失
- javascript - 如何查看 serverless.yml 中已解析的变量?
- windows - 处理早于 X 的文件
- postgresql - PostgreSQL 断言/触发器
- c# - 如何使用 LINQ 禁用已在组合框之间选择的项目?
- python - 由于 h5py,无法通过命令提示符加载 keras 模型
- ios - UITableViewCell 没有根据里面的图标获取动态单元格大小
- sql-server - SQL Server 语法失败