es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

SQL – Necesito crear filas adicionales con ‘all’ y reemplazar en las dos columnas con su respectiva división.

Tengo una tabla en Snowflake que se ve así:

Location Device Valor
DE ios 5
DE android 6
IT ios 3
IT android 1

Creé una consulta para alcanzar mi objetivo:

select location,
device,
values
from tracking

union all

select ‘all’ as location,
‘all’ as device,
values
from tracking

Entonces mi resultado es:

Location Device Valor
all all 16
DE ios 5
DE android 6
IT ios 3
IT android 1

Pero, lo que realmente quiero, mi resultado deseado es:

Location Device Valor
all all 16
all ios 8
all android 7
DE all 11
DE ios 5
DE android 6
IT all 4
IT ios 3
IT android 1

Espero que esté claro lo que quiero. Tengo una tabla muy complicada con filtros, etc. Por lo tanto, busco una solución muy simple. Si la idea de “union all” ya está complicando las cosas, estoy totalmente de acuerdo en hacer cambios allí también. Agradezco mucho cualquier idea.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener el resultado deseado, puedes usar la siguiente consulta:

    select 'all' as location, 'all' as device, sum(value) as value
    from tracking
    
    union all
    
    select 'all' as location, device, sum(value) as value
    from tracking
    group by device
    
    union all
    
    select location, 'all' as device, sum(value) as value
    from tracking
    group by location
    
    union all
    
    select location, device, value
    from tracking
    order by location, device
    

    Explicación de la consulta:

    • La primera declaración select devolverá la suma de todos los valores de la tabla y establecerá los valores ‘all’ para las columnas de ubicación y dispositivo.
    • La segunda declaración select devolverá la suma de los valores para cada dispositivo y establecerá ‘all’ para la columna de ubicación.
    • La tercera declaración select devolverá la suma de los valores para cada ubicación y establecerá ‘all’ para la columna de dispositivo.
    • La última declaración select simplemente devolverá los valores originales de la tabla.
    • Finalmente, el operador union all combinará todas las declaraciones select para crear el resultado deseado.

    Nota: Es importante utilizar union all en lugar de union para evitar la agregación de filas duplicadas.

Comments are closed.