题解 | #某店铺的各商品毛利率及店铺整体毛利率#
某店铺的各商品毛利率及店铺整体毛利率
https://www.nowcoder.com/practice/65de67f666414c0e8f9a34c08d4a8ba6
# 求商品和店铺整体的毛利率 # 限制:时间大于等于2021.10;店铺id为901 # 商品毛利率:进价、平均单件售价 # 店铺毛利率:总进价、总销售收入 # 订单明细表联结其他两个表,筛选出符合时间和店铺、付款状态要求的记录,作为一个临时表 # 根据 店铺ID 分组聚合出店铺的总进价和总销售收入,得到毛利率,作为一个临时表 # ps: 这个总进价是 进价*卖出数量,总销售收入是 售出价格*卖出收入 (得通过示例说明发现) # 在第一个临时表的基础上 商品ID 分组,分别计算各个商品的总进价和总收入,得到毛利率(方法和店铺一样) # UNION 组合两个查询,组合的时候为了按商品id排序,需要先括起来,防止因为店铺的没有id报错 WITH temp_0 AS( # 临时表,查询 商品id,进价、卖出梳理,卖出价格,总金额(这个完全不需要) SELECT product_id, in_price, cnt, price, total_amount FROM tb_order_detail JOIN tb_product_info a USING(product_id) JOIN tb_order_overall b USING(order_id) # 加限制条件,时间、店铺id,付款状态 WHERE DATE(event_time) >= '2021-10-01' AND shop_id = 901 AND status = 1 ) # 先查询店铺的,因为只有一个店铺,就不用分组,直接求进价总额、售价总额,根据公式求毛利率,要注意因为是百分比的形式,先对其*100放大,再加百分号 SELECT '店铺汇总', CONCAT(ROUND((1 - SUM(in_price*cnt)/SUM(price*cnt))*100, 1), '%') profit_rate FROM temp_0 UNION # 如法炮制 SELECT product_id, CONCAT(profit_rate, '%') profit_rate FROM (SELECT product_id, ROUND((1 - SUM(in_price*cnt)/SUM(price*cnt))*100, 1) profit_rate FROM temp_0 # 按商品id分组 GROUP BY product_id # 对毛利率进行筛选,这里的是进行了放大的 HAVING profit_rate > 24.9 # 为子查询设置别名 ORDER BY product_id) a