SUM, Count и convert - «не может выполнить агрегатную функцию для выражения, содержащего агрегат или подзапрос» - PullRequest
1 голос
/ 02 марта 2020

Я пытаюсь преобразовать столбец, представляющий собой тип Varchar, т.е. «Alert», в десятичное число, чтобы я мог разделить число «Alert» на SUM или общее количество «Alerts», чтобы получить процент предупреждений по типу модели. в день .... У меня есть следующий запрос, но я получаю сообщение об ошибке «не может выполнить статистическую функцию для выражения, содержащего агрегат или подзапрос».

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Я думаю, вы просто хотите условную агрегацию:

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;
1 голос
/ 02 марта 2020
  1. Как следует из ошибки, вы не можете напрямую выполнить агрегатную функцию для другого агрегата.
  2. Чтобы достичь этого, вы должны сначала посчитать результаты, а затем использовать функцию суммы во внешнем запросе.
  3. Также используйте Sum () без groupby во внешнем запросе, чтобы получить сумму всех записей.
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...