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.

Agrupar por categorías creadas dentro de la consulta en SQL.

Tengo una tabla en la que quiero agrupar tanto por categoría como por días. Sin embargo, quiero organizar los días en grupos separados y aparentemente no encuentro la forma de hacerlo.

Tabla:
| Days | Category | Values |
| 2 | A | 20 |
| 4 | B | 50 |
| 6 | A | 100 |
| 2 | A | 70 |
| 1 | B | 220 |
| 9 | A | 130 |
| 7 | A | 45 |
| 1 | A | 90 |
| 5 | B | 280 |
| 5 | B | 10 |
| 8 | A | 70 |
| 9 | B | 50 |
| 0 | A | 120 |
| 3 | B | 115 |
| 0 | B | 25 |
| 3 | B | 10 |
| 6 | A | 55 |

El resultado que me gustaría obtener:
| Days | Category | Values |
| 0-4 | A | 300 |
| 0-4 | B | 420 |
| 5-9 | A | 400 |
| 5-9 | B | 340 |

Basado en mi conocimiento actual esto es lo lejos que puedo llegar:
SELECT Days, Category, Value
FROM Table
GROUP BY Days, Category

Pero, por supuesto, no puedo crear los grupos de días. ¿Podrías por favor ayudarme con ello?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar la declaración CASE para crear bloques de días basados en sus valores, y luego agrupar por la nueva columna de bloques junto con la columna de categoría. Aquí está la consulta modificada:

    SELECT
      CASE 
        WHEN Days <= 4 THEN '0-4' 
        ELSE '5-9' 
      END AS Day_Bucket,
      Category, 
      SUM(Value) AS Values
    FROM
      Table
    GROUP BY
      Day_Bucket, 
      Category;
    

    Esto creará una nueva columna de Day_Bucket basada en los valores de la columna de Days. Si el valor es menor o igual a 4, se categorizará como ‘0-4’, de lo contrario se categorizará como ‘5-9’. Luego agrupamos por la nueva columna Day_Bucket y la columna Category, y calculamos la suma de valores para cada grupo.

    El resultado será el siguiente:

    | Day_Bucket | Category | Values |
    |------------|----------|--------|
    | 0-4        | A        | 300    |
    | 0-4        | B        | 420    |
    | 5-9        | A        | 400    |
    | 5-9        | B        | 340    |
    

Comments are closed.