查看全课大纲(第 4 / 5 节)

GROUP BY 分组与聚合

在小象咖啡馆的日常经营中,比起看一笔笔零散的流水明细,店长更关心宏观的汇总指标。比如:今天总共卖出了多少杯咖啡?总销售额是多少?顾客单笔平均消费是多少?这就轮到聚合函数登场了:

  • COUNT():统计行数(订单总笔数)。
  • SUM():求数值列的总和(总销售额)。
  • AVG():求数值列的平均值(平均客单价)。

例如,计算小象咖啡馆所有订单的平均消费金额:

SELECT AVG(amount) AS avg_spend FROM orders;

📝 选择题

💡 侦探排雷:统计朝阳分店订单数 小象咖啡馆“朝阳分店”店长想知道今天店里总共接待了多少笔订单。以下哪条 SQL 查询语句能正确统计出该店的订单总数(数据表为 orders,分店字段为 branch_name)?

  • A. SELECT SUM(order_id) FROM orders WHERE branch_name = ‘Chaoyang’;
  • B. SELECT COUNT(*) FROM orders WHERE branch_name = ‘Chaoyang’;
  • C. SELECT COUNT(all) FROM orders WHERE branch_name = ‘Chaoyang’;
  • D. SELECT COUNT(amount) FROM orders WHERE branch_name = ‘Chaoyang’ GROUP BY order_id;

答案:B(SELECT COUNT(*) FROM orders WHERE branch_name = ‘Chaoyang’;)


如果我们想按某些类别进行分别汇总,就需要配合使用 GROUP BY 子句。

例如,店长想知道小象咖啡馆每个分店 branch_name 的平均销售额,SQL 语句可以这样写:

SELECT branch_name, AVG(amount) AS avg_amount 
FROM orders 
GROUP BY branch_name;

这样 SQL 就会先将所有订单按照分店名称进行分组,然后在每个组内单独计算 AVG(amount) 并输出。


✏️ 填空题

💡 侦探实战:按饮品品类统计营业额 为了帮小象咖啡馆分析哪类产品最赚钱,我们需要统计订单明细表 order_details 中每个饮品分类 category 的总营业额 SUM(amount)。请补全下方 SQL 代码:

-- 按品类分组统计总营业额
SELECT category, SUM(amount) FROM order_details 
___ BY category;

答案:GROUP