SELECT o.ordee_id, o.customer_id, SUM(p.price * oi.quantity) AS order o JOIN OrderItems oi ON o.order_id = oi.order_id JOIN Products p ON oi.product_id = p.product_id GROUP BY o.order_id,o.customer_id;
SELECT *FROM( SELECT c.name AS customer_name, o2.order_id, o2.order_amout, ROW_NUMBER() OVER( PARTITION BY c.customer_id ORDER BY o2.order_amout DESC )AS rn FROM (SELECT o.order_id, o.customer_id, SUM(p.price * oi.quantity) AS order_amout order_amout FROM Orders o JOIN OrderItems oi ON o.order_id = oi.order_id JOIN Products p ON oi.product_id = p.product_id GROUP BY o.order_id,o.customer_id )o2 JOIN Customers c ON o2.customer_id =c.customer_id)ranked WHERE rn =1;
4.查询结果示例
customer_name
order_id
order_amout
Alice
1001
2597.00
Bob
1002
447.00
高级分析2:每个产品的平均”每单”销量
1.需求描述
例如,充电宝买了3个,但分布在多少订单? 需要算:
1
平均每单购买数量 = (总销量)/(下单次数)
2.SQL
1 2 3 4 5 6 7 8
SELECT p.product_name, SUM(oi.quantity) AS total_sold, COUNT(DISTINCT oi.order_id) AS order_count, ROUND(SUM(oi.quantity)/(DISTINCT oi.order_id),2) AS avg_per_order FROM Products p JOIN OrderItems oi ON p.product_id = oi.product_id GROUP BY p.product_id,p.product_name;
product_name
total_sold
order_count
avg_per_orders
充电宝
3
1
3.00
耳机
2
1
2.00
手机
1
1
1.00
高级分析3:统计每日销售额(安居日期聚合)
这是电商最常用的时间序列分析。
1 2 3 4 5 6 7 8 9
SELECT o.order_date, SUM(p.price * oi.quantity) AS daily_sales FROM Orders o JOIN OrderItems oi ON o.order_id = oi.order_id JOIN Products p ON oi.product_id = p.product_id GROUP BY o.order_date ORDER BY o.order_date;
SELECT * FROM ( SELECT c.name AS customer_name, o.order_id, o.order_date, ROW_NUMBER()OVER( PARTITION BY o.customer_id ORDER BY o.order_name DESC) AS rn FROM orders o JOIN Customers c ON o.customer_id = c.customer_id)t WHERE rn = 1;