Se já existe uma tabela de lojas que contém todas as informações da loja, podemos usar essa tabela diretamente na consulta sem listar manualmente o nome de cada loja. Veja a seguir um exemplo de instrução de consulta:
Instruções SQL:
SELECT
dates.order_date,
stores.store_name,
IFNULL(SUM(orders.amount), 0) AS total_amount
FROM (
SELECT
DATE_ADD('2023-03-01', INTERVAL seq DAY) AS order_date
FROM (
SELECT 0 AS seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) seq
WHERE DATE_ADD('2023-03-01', INTERVAL seq DAY) BETWEEN '2023-03-01' AND '2023-03-08' -- 时间范围
) dates
CROSS JOIN stores
LEFT JOIN orders ON orders.order_date = dates.order_date AND orders.store_name = stores.store_name
GROUP BY dates.order_date, stores.store_name
ORDER BY dates.order_date, stores.store_name;
Na instrução de consulta acima, usamos uma operação CROSS JOIN para conectar a sequência de datas e a tabela de armazenamento para garantir que cada dia tenha um nome de armazenamento correspondente. Em seguida, usamos uma operação LEFT JOIN para unir a série de datas e armazenar a tabela com a tabela de pedidos para garantir que cada dia tenha um registro de pedido correspondente e usamos a função IFNULL para substituir os valores NULL por 0. Por fim, usamos a cláusula GROUP BY para agrupar os resultados por data e nome da loja e classificá-los em ordem crescente por data e nome da loja para obter as vendas de cada dia.