He escrito un SQL que produjo días tomados y cuenta cuántos de cada uno. Lo que me gustaría lograr es un recuento y porcentajes de cómo hay más y menos de 10 días.

Debajo de los datos de muestra y lo que me gustaría lograr en textos de colores.

enter image description here

Su ayuda será muy apreciada gracias montones.

0
Interalianz 25 jun. 2020 a las 03:57

2 respuestas

En TSQL, puede usar cross apply y la agregación:

Puedes hacer la agregación condicional:

select 
    x.descr,
    1.0 * sum(x.how_many) / sum(sum(x.how_many)) over() as how_many_ratio,
    sum(x.how_many) as how_many_value
from mytable t
cross apply (values 
    (
        'greater than 10 days'
        case when days_taken > 10 then how_many else 0 end
    ),
    (
        'less than and 10 days'
        case when days_taken <= 10 then how_many else 0 end
    )
) as x(descr, how_many)
group by x.descr

Si está contento con tener todos los resultados en una sola fila, la agregación condicional es más simple:

select
    1.0 * sum(case when days_taken > 10 then how_many else 0 end)
        / sum(how_many) as how_many_above_10_ratio,
    sum(case when days_taken > 10 then how_many else 0 end) as how_many_above_10,
    1.0 * sum(case when days_taken <= 10 then how_many else 0 end)
        / sum(how_many) as how_many_below_10_ratio,
    sum(case when days_taken <= 10 then how_many else 0 end) as how_many_below_10
from mytable
0
GMB 25 jun. 2020 a las 01:09

Si solo desea los últimos dos días, puede usar:

select (case when days_take <= 10 then '10 or less' else 'greater than 10' end) as grp,
       count(*) * 100.0 / sum(count(*)) over () as percentage,
       count(*) as ratio
from t
group by (case when days_take <= 10 then '10 or less' else 'greater than 10' end);
0
Gordon Linoff 25 jun. 2020 a las 01:14