题解 | #某店铺的各商品毛利率及店铺整体毛利率#

某店铺的各商品毛利率及店铺整体毛利率

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

全部评论

相关推荐

只写bug的程序媛:才15,我招行20多万,建设银行50多万,说放弃就放弃
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务