¿Cómo seleccionar datos SQL en cubos cuando no existen datos de un cubo?

Womprat:

Estoy tratando de obtener un conjunto completo de segmentos de un determinado conjunto de datos, incluso si no existen registros de algunos cubos .

Por ejemplo, quiero mostrar los totales por día de la semana, con cero total de días con ningún registro.

SELECT
WEEKDAY(transaction_date) AS day_of_week,
SUM(sales) AS total_sales
FROM table1
GROUP BY day_of_week

Si tengo ventas todos los días, voy a conseguir 7 filas en mi resultado que representan las ventas totales en los días 0-6.

Si no tengo ventas en el día 2, no consigo ninguna consecuencia para el día 2.

¿Cuál es la forma más eficiente para forzar un valor cero para el día 2?

Debería unirse a una tabla temporal o matriz de cubos definidos? [ '0', '1', '2' '3', '4', '5', '6']

¿O es mejor para insertar ceros fuera de MySQL, después de lo que he hecho la consulta?

Estoy utilizando MySQL, pero esto es una cuestión general de SQL.

GMB:

En MySQL, puede simplemente usar una tabla derivada de los números de 1a 7, left joincon la mesa, entonces agregada:

select d.day_of_week, sum(sales) AS total_sales
from (
    select 1 day_of_week union all select 2 union all select 3 union all select 4
    union all select 5 union all select 6 union all select 7
) d
left join table1 t1 on weekday(t1.transaction_date) = d.day_of_week
group by day_of_week

Versiones muy recientes tienen la values(row...)sintaxis, lo que acorta la consulta:

select d.day_of_week, sum(sales) AS total_sales
from (values row(1), row(2), row(3), row(4), row(5), row(6), row(7)) d(day_of_week)
left join table1 t1 on weekday(t1.transaction_date) = d.day_of_week
group by day_of_week

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=387260&siteId=1
Recomendado
Clasificación