1
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
4

3 回答 3

0

您的代码为所有经理返回“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;
于 2020-02-21T11:37:15.300 回答
0

您可以通过以下方式检索您想要的结果

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

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

于 2020-02-21T13:09:04.527 回答
0

你的例子:

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

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

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

这使:

MANAGER CNT
John    3
Domnic  2
于 2020-03-09T18:22:33.020 回答