通过聚合函数计算最大值



我想显示至少有一个命名驱动程序的计划数量,这样我就可以用至少一个驱动程序计算出%的策略。例如,可能有两个司机,所以我只想看看那些至少有一个的司机。这是我开始编写的代码,我一直纠结于如何使计数显示为每个策略的至少1个驱动程序。

SELECT 
case when DRIVER_ROLE = 'Named driver' THEN 1 else null END as named_driver_ind
,DD.[DRIVER_ROLE]
,PD.[PLAN_NBR]
FROM DD
LEFT JOIN PD
on PD.DRIVE_PLAN_NBR = DD.DRIVE_PLAN_NBR
group by 
DD.DRIVER_ROLE
,DD.[DRIVE_PLAN_NBR] 

这是一些样本数据。。前3行是具有3个驱动程序的一个策略。他们有两个命名的驱动程序,所以需要算作是,他们至少有一个驱动程序

| DD.driver_role| DD.Drive_Plan_NBR|DP.PLAN_NBR   |DD.Driver_ID | 
|:------------: |:---------------: | :-----------:|:-----------:|
| Named driver  | 756              | 87397        | 123         |
| Policy holder | 756              | 87397        | 124         |
| Named driver  | 756              | 87397        | 125         |
| Policy holder | 759              | 23211        | 188         |

预期结果是计划nbr的计数和至少有一个驱动的最大计数

| count_Plan_nbr| Policies with at least 1 more driver|| 
|:------------: |:------------------------------------:|
| 2             | 1                                    |   

欢迎使用S/O。你在这里真正需要的只是针对问题的DISTINCT计划

select distinct
DD.DRIVE_PLAN_NBR
from
DD
where
DD.Driver_Role = 'Named driver'

直接从您的dd表开始,该表具有您的条件"命名驱动程序"。由于dd也有计划编号,所以只需获取不同的编号,无论有多少,哪个编号都将返回一。不需要分组依据。

现在,如果你真的需要替代品";plan_nbr"与ID,只需加入即可拉动。不需要留下任何内容,因为主查询无论如何都会拉取那些具有命名驱动程序的内容。你只是得到额外的细节

select distinct
DD.DRIVE_PLAN_NBR,
PD.Plan_Nbr
from
DD
JOIN PD
on DD.DRIVE_PLAN_NBR = PD.DRIVE_PLAN_NBR
where
DD.Driver_Role = 'Named driver'

你提供的原始查询显示了我认为的所有额外部分,只是为了显示你测试的内容。但如果你的最终目标只是哪些计划至少有一个";命名驱动器";,现在你有了。

来自评论的反馈

好的,走近一点。您需要多少不同的策略,以及不同驱动程序的实际计数。因此,是的,这将使用骨料,但完成起来仍然相对简单。我要做两部分,你可以随意使用。第一个将显示每个计划以及的驱动程序数量

select 
DD.DRIVE_PLAN_NBR,
PD.Plan_Nbr,
count(distinct DD.Driver_ID) DriversOnThisPlan
from
DD
JOIN PD
on DD.DRIVE_PLAN_NBR = PD.DRIVE_PLAN_NBR
where
DD.Driver_Role = 'Named driver'
group by
DD.DRIVE_PLAN_NBR,
PD.Plan_Nbr

这将显示(根据您的数据(,一行显示计划编号信息,但司机数量为2。但这个查询本身会显示每个计划以及每个计划有多少司机。要获得所有这些的单行返回,请通过将其打包

select 
count(*) as NumberOfPlansWith1OrMoreDrivers,
sum( PreQuery.DriversOnThisPlan ) as TotalDriversOnAllPlans
from
( select
DD.DRIVE_PLAN_NBR,
PD.Plan_Nbr,
count(distinct DD.Driver_ID) DriversOnThisPlan
from
DD
JOIN PD
on DD.DRIVE_PLAN_NBR = PD.DRIVE_PLAN_NBR
where
DD.Driver_Role = 'Named driver'
group by
DD.DRIVE_PLAN_NBR,
PD.Plan_Nbr ) PreQuery

因此,这里的计数(*(只是基于内部有多少个唯一的计划,sum((是所有合格计划的总驱动因素。

现在,有一点需要注意,如果一个司机可能在多个计划中,他们将在每个唯一的计划中进行核算,这可能会高估实际的唯一司机。例如,我是一名私人承包商。我是一个人,但我工作的5家公司与你有一项政策。因此,我是这些公司的保险司机。即使我是一个人,我也会出现在5项政策和5名司机身上。我只是想解释/澄清你可能被问到的一种可能性,但我认为这种情况对于正常的管理问题来说是一种真正的异常情况。

相关内容

  • 没有找到相关文章

最新更新