首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在oracle中操作SQL ROWNUM?

如何在oracle中操作SQL ROWNUM?
EN

Stack Overflow用户
提问于 2021-05-22 19:11:38
回答 2查看 23关注 0票数 0

如何操作SQL ROWNUM?

下面的代码用于统计EMPLOYEES表中COMMISSION_PCT为NULL和不为NULL的列数。

代码语言:javascript
复制
SELECT *
FROM (SELECT T.*, ROWNUM AS RN
       FROM (
                SELECT COUNT(*)
                FROM EMPLOYEES
                GROUP BY COMMISSION_PCT) T
      ) T2

结果是这样的:

代码语言:javascript
复制
COUNT(*), RN
72,1
5,2
3,3
1,4
7,5
7,6
6,7
6,8

在这种情况下,如果选择COUNT(*),则结果为一行中的8个。我想要的

代码语言:javascript
复制
72, 1
35, SUM (rows 2-8)

同上。

我想知道怎样才能达到我想要的结果。

最好的尊重

EN

回答 2

Stack Overflow用户

发布于 2021-05-22 19:13:57

使用聚合:

代码语言:javascript
复制
SELECT COUNT(COMMISSION_PCT) as num_with_commission,
       COUNT(*) - COUNT(COMMISSION_PCT) as num_without_commission
FROM EMPLOYEES;

这恰好可以工作,因为您说缺少的值是NULL。如果是其他内容,则可以使用带有SUM()CASE表达式:

代码语言:javascript
复制
SELECT SUM(CASE WHEN COMMISSION_PCT <> 0 THEN 1 ELSE 0 END) as num_with_commission,
       SUM(CASE WHEN COMMISSION_PCT <> 0 THEN 0 ELSE 1 END) as num_without_commission
FROM EMPLOYEES;

编辑:

如果你想要两行的结果,你可以取消上面的透视。或者只使用两个查询:

代码语言:javascript
复制
SELECT 'With Commission', COUNT(*)
FROM EMPLOYEES
WHERE COMMISSION_PCT IS NOT NULL
UNION ALL
SELECT 'Without Commission', COUNT(*) 
FROM EMPLOYEES
WHERE COMMISSION_PCT IS NULL;

这比取消透视的效率要低一些,但是除非EMPLOYEES非常大或者是一个复杂的查询,否则您可能不会注意到其中的区别。

票数 0
EN

Stack Overflow用户

发布于 2021-05-22 22:26:57

分离非null和null佣金百分比,然后对结果进行分组。您可以直接在GROUP BY子句中使用case表达式(或许多其他方式)来完成此操作。如下所示:

代码语言:javascript
复制
SELECT *
FROM (SELECT T.*, ROWNUM AS RN
       FROM (
                SELECT COUNT(*)
                FROM hr.EMPLOYEES
                GROUP BY case when COMMISSION_PCT is not null then 0 end) T
      ) T2;

当佣金百分比不为空时,GROUP BY中的表达式为0;当佣金百分比为空时,表达式为空。因此只有两个组,一个组用于case表达式等于0,另一个组用于该表达式为空。

不清楚为什么你会认为这与“操纵ROWNUM”有关--我不明白你为什么需要它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67648831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档