如果已经有一个包含所有店铺信息的店铺表,那么我们可以在查询中直接使用这个表,而无需手动列出每个店铺的名称。下面是一个示例查询语句:
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;
在上面的查询语句中,我们使用了一个 CROSS JOIN 操作将日期序列和店铺表连接起来,以确保每一天都有对应的店铺名称。然后,我们使用了一个 LEFT JOIN 操作,将日期序列和店铺表与订单表连接起来,以确保每一天都有对应的订单记录,并使用 IFNULL 函数将 NULL 值替换为 0。最后,我们使用 GROUP BY 子句将结果按日期和店铺名称分组,并按日期和店铺名称升序排序,以得到每一天的营业额。