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 |
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:
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 originalsample_data
y una tabla que contiene todos los distintos niveles de madurez. Luego, la consulta externa realiza un left join entre esta tablat
y la tabla originalsample_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.