如何通过GROUP BY按用户分组统计订单数量及总金额?SQL求助
实现按用户邮箱分组统计的SQL语句
以下是修改后的SQL语句,可直接得到你需要的按用户邮箱分组的订单数量及总金额汇总结果:
SELECT c.email_address, COUNT(DISTINCT o.order_id) AS "Number of Orders", SUM((oi.item_price - oi.discount_amount) * oi.quantity) AS "Total Amount" FROM customers c INNER JOIN orders o ON c.customer_id = o.customer_id INNER JOIN order_items oi ON o.order_id = oi.order_id GROUP BY c.email_address ORDER BY c.email_address; -- 可选:按邮箱排序让结果更规整
关键修改说明
- 分组逻辑:通过
GROUP BY c.email_address将数据按用户邮箱聚合,确保每个邮箱仅返回一行汇总记录 - 订单数统计:使用
COUNT(DISTINCT o.order_id)而非普通COUNT(o.order_id)——因为同一订单下可能包含多个商品明细,直接计数会重复统计订单,DISTINCT能保证每个订单只被计算一次 - 总金额计算:用
SUM()函数对每个商品的实际支付金额(oi.item_price - oi.discount_amount) * oi.quantity求和,得到用户的累计消费总额 - 字段别名:保持别名与你需要的结果格式完全匹配,直接对应输出列
内容的提问来源于stack exchange,提问作者Nirodha Wickramarathna
相关产品推荐
相关产品推荐

