【发布时间】:2020-06-14 09:34:55
【问题描述】:
我正在尝试将 varchar 列(即“警报”)转换为小数,以便我可以将“警报”的计数除以 SUM 或“警报”的总数,以获得按模型类型的警报百分比每天......我有以下查询,但我收到错误“无法对包含聚合或子查询的表达式执行聚合函数”。
【问题讨论】:
标签: sql sql-server group-by aggregation
我正在尝试将 varchar 列(即“警报”)转换为小数,以便我可以将“警报”的计数除以 SUM 或“警报”的总数,以获得按模型类型的警报百分比每天......我有以下查询,但我收到错误“无法对包含聚合或子查询的表达式执行聚合函数”。
【问题讨论】:
标签: sql sql-server group-by aggregation
我认为你只是想要条件聚合:
select vehicle_model, date,
sum(case when Alter = 'true' then 1 else 0 end) as num_alerts,
avg(case when Alter = 'true' then 100.0 else 0 end) as percent_alerts
from MyTable
group by vehicle_model, date;
如果您想要不同行中的警报,那么:
select vehicle_model, date, alert,
count(*) as cnt,
count(*) * 100.0 / sum(count(*)) over (partition by vehicle_model, date) as percentage
from MyTable
group by vehicle_model, date, alert;
【讨论】:
with cte as(
select
vehicle_model,
Alert
,count(Alert) as 'Count_of_Alerts'
,date
from MyTable
group by vehicle_model,date,Alert
)
select
vehicle_model
,Alert
,date
,cast(Convert(decimal(18,2),(cast([Count_of_Alerts] as float)/cast(Summa as float)*100)) as varchar)+'%' as Percent_of_Alert
,[Count_of_Alerts]
from
(
select c.vehicle_model,c.Alert,[Count_of_Alerts],Summa
,c.date
from cte c
left join
(
(select vehicle_model,date,Sum(cte.[Count_of_Alerts]) as Summa from cte group by vehicle_model,date)
)A ON A.date=c.date AND A.vehicle_model=c.vehicle_model
)YY
【讨论】: