第 4 站:JOIN、聚合与结果粒度
本站目标
先定义“一行代表什么”,再组合 JOIN 和聚合。ON 决定匹配,WHERE 过滤连接后的行;对外连接而言位置会改变保留语义。
sql
USE mysql_course;
SELECT c.customer_id, COUNT(o.order_id) AS order_count
FROM customer AS c
LEFT JOIN sales_order AS o ON o.customer_id = c.customer_id
GROUP BY c.customer_id;真实边界
一对多 JOIN 会放大行数;多个一对多关系直接相连可能产生乘积并让金额重复。先按正确粒度预聚合。
无答案练习
保留没有订单的客户,同时只统计已支付订单。