【问题标题】:Is there an analytic function for count in oracle sqloracle sql中是否有count的解析函数
【发布时间】:2020-02-21 11:35:33
【问题描述】:
select manager, count(*) over (partition by manager) cnt
from dbtable
group by manager

这将为我提供经理的计数,但如果我需要高级经理的计数,我将如何获得它?

|--------------------|------------------|
|      Manager       |Senior_Manager    |  
|--------------------|------------------|
|      John          |Arpit             |
|      John          |govind            |
|      John          |olive             |
|      Domnic        |kelvin            |
|      Domnic        |paul              |
|--------------------|------------------|

结果

John 3
Domnic 2

【问题讨论】:

  • 请提供样本数据和期望的结果。比如什么是“高级经理”。

标签: sql oracle-apex oracle-apex-5 oracle-apex-5.1


【解决方案1】:

您的代码为所有经理返回“1”——因为它计算group by 之后的行数

如果您想计算给定经理的表中的行数,那么您需要 聚合,而不是 分析 函数:

Select manager, count(*) as cnt
from dbtable
group by manager;

我不确定这是否回答了您的问题,但它至少解决了您的查询没有做太多有用的问题。

编辑:

对于修改后的问题,简直是:

Select senior_manager, count(*) as cnt
from dbtable
group by senior_manager;

【讨论】:

  • 我同意,但我需要这位经理下的高级经理人数。看我上面的表格
【解决方案2】:

你想要的结果可以通过

select manager, count(*) over (partition by manager) cnt
from dbtable

这意味着每个管理器将与分区中的行数相关联,其中 {manager} 值等于该确切的管理器。根据上表,这是您期望得到的。

【讨论】:

    【解决方案3】:

    你的例子:

    select manager, count(*) over (partition by manager) cnt
    from dbtable
    group by manager
    

    产生以下结果:

    MANAGER CNT
    Domnic  1
    John    1
    

    如果你放弃分组,你会得到:

    MANAGER CNT
    Domnic  2
    Domnic  2
    John    3
    John    3
    John    3
    

    这些是您正在寻找的计数吗?如果是这样,那么您可以消除具有 distinct 的重复行:

    select distinct manager, count(*) over (partition by manager) cnt
    from dbtable
    

    这给出了:

    MANAGER CNT
    John    3
    Domnic  2
    

    【讨论】:

      猜你喜欢
      • 2011-12-17
      • 2010-09-29
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 2012-02-08
      • 1970-01-01
      • 2021-01-22
      相关资源
      最近更新 更多