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.

Obtenga el ROLLUP para incluir filas con valores faltantes.

PostgreSQL 14

Suponiendo estos datos de muestra:

fruta madurez
naranja 1
naranja 3
manzana 0
manzana 3
manzana 3
manzana 2

¿Hay alguna forma de obtener ROLLUP para darme un recuento de frutas por madurez con una fila para cada posible valor de madurez como esto:

fruta madurez recuento
naranja 0 0
naranja 1 1
naranja 2 0
naranja 3 1
naranja 2
manzana 0 1
manzana 1 0
manzana 2 1
manzana 3 2
manzana 4
6

En lugar de solo aparecer los valores existentes en el grupo como esto:

fruta madurez recuento
naranja 1 1
naranja 3 1
naranja 2
manzana 0 1
manzana 2 1
manzana 3 2
manzana 4
6
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible utilizar ROLLUP para obtener un conteo de frutas por madurez con una fila para cada valor posible de madurez. Una forma de lograr esto es mediante el uso de un join cruzado para generar una tabla de todas las combinaciones posibles de frutas y niveles de madurez, y luego realizar un left join entre la tabla original y esta tabla de join cruzado. La tabla resultante puede ser agrupada por fruta y madurez, y la función ROLLUP puede ser utilizada para generar subtotales y un total general.

    Aquí hay un ejemplo de consulta:

    SELECT t.fruit, t.ripeness, COUNT(fruit) AS count
    FROM (
      SELECT DISTINCT fruit, ripeness
      FROM sample_data
      CROSS JOIN (SELECT DISTINCT ripeness FROM sample_data) r
    ) t
    LEFT JOIN sample_data s ON t.fruit = s.fruit AND t.ripeness = s.ripeness
    GROUP BY ROLLUP(t.fruit, t.ripeness)
    

    La subconsulta genera una tabla t que contiene todas las posibles combinaciones de fruta y niveles de madurez al realizar un join cruzado entre la tabla original sample_data y una tabla que contiene todos los distintos niveles de madurez. Luego, la consulta externa realiza un left join entre esta tabla t y la tabla original sample_data basado en los valores coincidentes de fruta y madurez, y cuenta el número de frutas para cada valor de fruta y madurez.

    La tabla resultante es agrupada por fruta y madurez utilizando la función ROLLUP para generar subtotales para cada grupo, así como un total general para toda la tabla. La función COUNT devuelve 0 para cualquier combinación faltante de fruta y madurez en la tabla original, lo que permite que la función ROLLUP produzca el resultado deseado.

Comments are closed.