如何关联两张表并统计商品在盘点日期当日的销售数量
SQL 实现语句
你可以直接执行以下语句生成所需的SALES_AT_CHECK_DAY表:
CREATE TABLE SALES_AT_CHECK_DAY AS SELECT p.*, COALESCE(s.sales, 0) AS sales FROM PRODUCTS p LEFT JOIN ( -- 子查询统计每个商品每日的销售总量 SELECT product_id, sale_date, COUNT(*) AS sales FROM SALES GROUP BY product_id, sale_date ) s -- 同时匹配商品ID和「盘点日期=销售日期」两个关联条件 ON p.product_id = s.product_id AND p.date_checked = s.sale_date;
逻辑说明
- 内层子查询先对SALES表按
product_id、sale_date两个字段分组,用COUNT(*)计算得到每个商品在对应日期的销售总笔数 - 外层用PRODUCTS表作为主表关联统计结果,关联条件同时匹配商品ID和日期,确保取到的是对应商品盘点当日的销量数据
- 如果不需要保留盘点当日无销售记录的商品,把
LEFT JOIN替换为INNER JOIN即可,执行结果和你给出的示例完全一致 COALESCE函数的作用是把无销量商品的NULL值自动填充为0,避免结果出现空值
内容的提问来源于stack exchange,提问作者Marcos Dias
相关产品推荐
相关产品推荐

