不用ROLLUP,MySQL5.7完美运行的解法

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

http://www.nowcoder.com/practice/65de67f666414c0e8f9a34c08d4a8ba6

题意

给你一张产品信息表,一张订单明细表,一张订单总表,请你查询出901店铺2021年10月份以来所有毛利率大于24.9%的商品信息和店铺的整体毛利率

思路

  • 既然需要商品和店铺两种,那么我们直接将问题分为两个部分不就行了?所以我们可以先行查询店铺的整体毛利率
  • 因为店铺毛利率 = (1 - 总进价成本 / 总销售成本) * 100%,所以我们应该求出卖出的商品进价总和以及销售总和(两者对应的商品数量应该一致),而最终结果的"%"符号则只需要使用CONCAT进行连接即可,所以SQL如下

SQL1

SELECT
	'店铺汇总' AS 'product_id',
	CONCAT(ROUND(100 * (1 - (SUM(t1.in_price * t2.cnt) / SUM(t2.price * t2.cnt))), 1), '%') AS 'profit_rate'
FROM
	tb_product_info AS t1
INNER JOIN tb_order_detail AS t2 ON t1.product_id = t2.product_id
INNER JOIN tb_order_overall AS t3 ON t2.order_id = t3.order_id
WHERE t1.shop_id = 901
AND DATE(t3.event_time) >= '2021-10-01'
  • 剩下的就是单个商品了,我们采用类似的方法即可,注意这里的毛利率需要基于单价计算
  • 问题是,在获取901店铺每个商品的毛利率后,怎么筛选出毛利率大于24.9%的呢?此时我们的SQL为

SQL2

SELECT
	t1.product_id,
	CONCAT(ROUND(100 * (1 - t1.in_price / AVG(t2.price)), 1), '%') AS 'profit_rate'
FROM
	tb_product_info AS t1
INNER JOIN tb_order_detail AS t2 ON t1.product_id = t2.product_id
INNER JOIN tb_order_overall AS t3 ON t2.order_id = t3.order_id
WHERE t1.shop_id = 901
AND DATE(t3.event_time) >= '2021-10-01'
GROUP BY t1.product_id
  • 直接在HAVING中使用profit_rate吗?profit_rate是CONCAT连接后的结果,它是一个字符串呀,不能与数字直接比较,那咋办?类型转换?但它还带有一个"%"呀
  • 不怕,我们可以先使用SUBSTRING_INDEX分割出数字部分,再使用CAST将其转换为DECIMAL类型即可,最终SQL如下
SQL1
UNION ALL
SQL2
HAVING CAST(SUBSTRING_INDEX(profit_rate, '%', 1) AS DECIMAL(3, 1)) > 24.9
  • 其他题解中用到了ROLLUP,在MySQL8.0确实没问题,但在MySQL5.7中ROLLUP和ORDER BY不能一起使用,因此我这里并未选择ROLLUP

     

官方文档

alt alt

MySQL练习 文章被收录于专栏

解析牛客网中的SQL题目

全部评论
你SQL2对吗?group by 不应该是这个把
点赞 回复 分享
发布于 2022-03-16 15:18
对avg理解不到位
点赞 回复 分享
发布于 2022-12-05 12:49 河南

相关推荐

笑着秋招😊:我一直认为努力有回报是一件很幸福很幸福的事情,恭喜你
点赞 评论 收藏
分享
评论
17
1
分享

创作者周榜

更多
正在热议
更多
# 你的mentor是什么样的人? #
3992次浏览 29人参与
# 你觉得mentor喜欢什么样的实习生 #
10339次浏览 286人参与
# 未岚大陆求职进展汇总 #
23829次浏览 113人参与
# 帮我看看,领导说这话什么意思? #
6245次浏览 25人参与
# 没有家庭托举的我是怎么找工作的 #
12354次浏览 158人参与
# 怎么给家人解释你的工作? #
1394次浏览 16人参与
# 智慧芽求职进展汇总 #
17936次浏览 106人参与
# 求职低谷期你是怎么度过的 #
5246次浏览 92人参与
# 26届秋招公司红黑榜 #
12157次浏览 42人参与
# 从哪些方向判断这个offer值不值得去? #
6568次浏览 93人参与
# 同bg的你秋招战况如何? #
158817次浏览 927人参与
# 度小满求职进展汇总 #
10091次浏览 51人参与
# 实习必须要去大厂吗? #
146641次浏览 1541人参与
# 校招泡的最久的公司是哪家? #
4576次浏览 22人参与
# 你有哪些缓解焦虑的方法? #
37174次浏览 835人参与
# 面试紧张时你会有什么表现? #
1697次浏览 20人参与
# 你喜欢工作还是上学 #
77574次浏览 860人参与
# 入职第一天,你准备什么时候下班 #
85478次浏览 467人参与
# 秋招想进国企该如何准备 #
97707次浏览 487人参与
# 简历无回复,你会继续海投还是优化再投? #
103582次浏览 819人参与
# 机械人的工作环境真的很差吗 #
25021次浏览 119人参与
# 独居后,你的生活是更好了还是更差了? #
28125次浏览 263人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务