我如何得到这三行的平均值。(SQL)

我如何得到这三行的平均值。(SQL),sql,tsql,group-by,average,Sql,Tsql,Group By,Average,我能够得到我需要的三家医院的结果。知道吗,我正试图找出如何将这三个结果平均起来,从而得出整个团队的结果 SELECT H.[Hospital Name], Format(1.0* Avg (Case When s.[PhysicianQuestion]>3 Then 1.0 Else 0 End),'P2') As [Physician Top Box], Format(1.0*Avg (Case When s.[NurseQuestion]=4 Then

我能够得到我需要的三家医院的结果。知道吗,我正试图找出如何将这三个结果平均起来,从而得出整个团队的结果

   SELECT H.[Hospital Name],
    Format(1.0* Avg (Case When s.[PhysicianQuestion]>3 Then 1.0 Else 0 End),'P2') As    [Physician 
   Top Box],
   Format(1.0*Avg (Case When s.[NurseQuestion]=4 Then 1.0 Else 0 End),'P2') As [Nurse Top Box],
  Format( 1.0*Avg ( Case When s.[FacilityQuestion]=4 Then 1.0 Else 0 end),'P2') As [Facility Top Box]
  From surveyresponses as S
  Join Visits as V  on v.AccountNumber=S.AccountNumber
   join Hospitals as H on  H.HospitalID=V.HospitalID
   Group By [Hospital Name] 
   Order By [Hospital Name]


     Results 
     Central Hospital       74.04%  76.15%  71.26%
      Desert Flats Hospital 67.79%  68.99%  73.96%
     Mercy Valley Hospital  74.93%  76.45%  73.88%

如果我没有弄错,您可以添加另一个聚合级别:

select
    format(avg([Physician Top Box]), 'P2') [Avg Physician Top Box],
    format(avg([Nurse Top Box]),     'P2') [Avg Nurse Top Box],
    format(avg([Facility Top Box]),  'P2') [Avg Facility Top Box]
from (
    select 
        h.[Hospital Name],
        avg(case when s.PhysicianQuestion > 3 then 1.0 else 0 end) As [Physician Top Box],
        avg(case when s.NurseQuestion = 4     then 1.0 else 0 end) As [Nurse Top Box],
        avg(case when s.FacilityQuestion = 4  then 1.0 else 0 end) As [Facility Top Box]
    from surveyresponses as s
    inner join Visits as v    on v.AccountNumber = s.AccountNumber
    inner join Hospitals as h on h.HospitalID    = v.HospitalID
    group by h.[Hospital Name]
) t
注意,在所有的艺术计算之后,我将格式化移到了外部查询


另一方面,如果需要查询返回的每行的三列值的平均值,可以执行以下操作:

select
    [Hospital Name],
    format([Physician Top Box], 'P2') [Physician Top Box],
    format([Nurse Top Box],     'P2') [Nurse Top Box],
    format([Facility Top Box],  'P2') [Facility Top Box],
    ([Physician Top Box] + [Nurse Top Box] + [Facility Top Box]) / 3 [Avg Top Box]
from (
    select 
        h.[Hospital Name],
        avg(case when s.PhysicianQuestion > 3 then 1.0 else 0 end) As [Physician Top Box],
        avg(case when s.NurseQuestion = 4     then 1.0 else 0 end) As [Nurse Top Box],
        avg(case when s.FacilityQuestion = 4  then 1.0 else 0 end) As [Facility Top Box]
    from surveyresponses as s
    inner join Visits as v    on v.AccountNumber = s.AccountNumber
    inner join Hospitals as h on h.HospitalID    = v.HospitalID
    group by h.[Hospital Name]
) t

请注意,这里并不严格需要子查询;它只是避免了多次重复条件表达式。

如果我正确地遵循了您的要求,您可以添加另一个聚合级别:

select
    format(avg([Physician Top Box]), 'P2') [Avg Physician Top Box],
    format(avg([Nurse Top Box]),     'P2') [Avg Nurse Top Box],
    format(avg([Facility Top Box]),  'P2') [Avg Facility Top Box]
from (
    select 
        h.[Hospital Name],
        avg(case when s.PhysicianQuestion > 3 then 1.0 else 0 end) As [Physician Top Box],
        avg(case when s.NurseQuestion = 4     then 1.0 else 0 end) As [Nurse Top Box],
        avg(case when s.FacilityQuestion = 4  then 1.0 else 0 end) As [Facility Top Box]
    from surveyresponses as s
    inner join Visits as v    on v.AccountNumber = s.AccountNumber
    inner join Hospitals as h on h.HospitalID    = v.HospitalID
    group by h.[Hospital Name]
) t
注意,在所有的艺术计算之后,我将格式化移到了外部查询


另一方面,如果需要查询返回的每行的三列值的平均值,可以执行以下操作:

select
    [Hospital Name],
    format([Physician Top Box], 'P2') [Physician Top Box],
    format([Nurse Top Box],     'P2') [Nurse Top Box],
    format([Facility Top Box],  'P2') [Facility Top Box],
    ([Physician Top Box] + [Nurse Top Box] + [Facility Top Box]) / 3 [Avg Top Box]
from (
    select 
        h.[Hospital Name],
        avg(case when s.PhysicianQuestion > 3 then 1.0 else 0 end) As [Physician Top Box],
        avg(case when s.NurseQuestion = 4     then 1.0 else 0 end) As [Nurse Top Box],
        avg(case when s.FacilityQuestion = 4  then 1.0 else 0 end) As [Facility Top Box]
    from surveyresponses as s
    inner join Visits as v    on v.AccountNumber = s.AccountNumber
    inner join Hospitals as h on h.HospitalID    = v.HospitalID
    group by h.[Hospital Name]
) t

请注意,这里并不严格需要子查询;它只是避免了多次重复条件表达式。

如果需要获得医院员工的整体绩效

select [Hospital Name],
    format( (([Physician Top Box] + [Nurse Top Box] + [Facility Top Box] )/3), 'P2') AS
    [Overall Hospital Performance]
from (
    select 
        h.[Hospital Name],
        avg(case when s.PhysicianQuestion > 3 then 1.0 else 0 end) As [Physician Top Box],
        avg(case when s.NurseQuestion = 4     then 1.0 else 0 end) As [Nurse Top Box],
        avg(case when s.FacilityQuestion = 4  then 1.0 else 0 end) As [Facility Top Box]
    from surveyresponses as s
    inner join Visits as v    on v.AccountNumber = s.AccountNumber
    inner join Hospitals as h on h.HospitalID    = v.HospitalID
    group by h.[Hospital Name]
) t

如果需要了解医院员工的整体绩效

select [Hospital Name],
    format( (([Physician Top Box] + [Nurse Top Box] + [Facility Top Box] )/3), 'P2') AS
    [Overall Hospital Performance]
from (
    select 
        h.[Hospital Name],
        avg(case when s.PhysicianQuestion > 3 then 1.0 else 0 end) As [Physician Top Box],
        avg(case when s.NurseQuestion = 4     then 1.0 else 0 end) As [Nurse Top Box],
        avg(case when s.FacilityQuestion = 4  then 1.0 else 0 end) As [Facility Top Box]
    from surveyresponses as s
    inner join Visits as v    on v.AccountNumber = s.AccountNumber
    inner join Hospitals as h on h.HospitalID    = v.HospitalID
    group by h.[Hospital Name]
) t

提供样本数据、期望结果和适当的数据库标记。提供样本数据、期望结果和适当的数据库标记。您好,感谢您的帮助,我正在尝试从医院获得avg结果的输出,例如,中心医院的结果是74.04%76.15%71.26%,我想把这些结果平均起来,得到一个综合结果score@LamarReynolds:好的,我明白了。请参阅我答案中的第二个查询。您好,谢谢您的帮助,我正在尝试从医院获得平均结果的输出。例如,中心医院的结果为74.04%76.15%71.26%。我想将这些结果平均起来,以获得一个合成结果score@LamarReynolds:好的,我明白了。请参阅我答案中的第二个问题。