Como faço para selecionar dados SQL em baldes quando os dados não existe para um balde?

Womprat:

Eu estou tentando obter um conjunto completo de baldes para um determinado conjunto de dados, mesmo que não existem registros para alguns baldes .

Por exemplo, eu quero exibir totais por dia da semana, com um total zero para dias sem registros.

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

Se eu tiver de vendas todos os dias, eu vou pegar 7 linhas em meu resultado representando vendas totais nos dias 0-6.

Se eu não tenho vendas no Dia 2, recebo nenhum resultado para o Dia 2.

Qual é a maneira mais eficiente para forçar um valor de zero para o dia 2?

Devo juntar-se a uma tabela temporária ou matriz de baldes definidos? [ '0', '1', '2', '3', '4', '5', '6']

Ou é melhor para inserir zeros fora do MySQL, depois que eu fiz a consulta?

Estou usando o MySQL, mas esta é uma questão geral SQL.

GMB:

No MySQL, você poderia simplesmente usar uma tabela derivada de números 1para 7, left joincom a mesa, então 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

Versões muito recentes têm a values(row...)sintaxe, que encurtar a 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

Acho que você gosta

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