当前位置: 首页 > news >正文

市场分析 3 mysql (槽)

本题有挺多槽点的

市场分析 3

 链接:

市场分析 III

读题:

1. 要求的是卖出的东西不是最喜欢的品牌,且比如卖出了10件都是一个品牌的,也仅仅计数为1。

2. 按照上述计数结果返回计数最大的卖家以及计数结果。

博主思考:

首先,题目的描述就很笼统,我认为,不同的item_id 可能 是同样的品牌,比如 iphone和ipad的品牌都是苹果,所以应该以item_brand 进行去重计数。

所以思路是这样的:

1. orders 表连表 items,得到oi 表, 获取每个订单的商品的品牌item_brand

2. oi表连接users表,获取每个订单对应的卖家的最喜欢的品牌

3. 对比当前订单中商品品牌和当前订单卖家的最喜欢品牌是否相同,筛选出不同的

4. 按照卖家分组,去重计数品牌种类

5. 使用rank()而不是row_number()开窗排名,筛出排名为1的排序后输出。

所以,我一开始的代码是这样的:

-- 每个订单中对应的品牌名
with oi as 
(
select order_id,seller_id, item_brand
from orders o join items i on o.item_id = i.item_id
)
,
-- 每个卖家卖了了几种非喜爱品牌
oiu as 
(
select oi.seller_id,
count(distinct oi.item_brand) as num_items
from oi join users u on oi.seller_id = u.seller_id 
where oi.item_brand != u.favorite_brand
group by oi.seller_id
)select seller_id,num_items from 
(		
select seller_id,num_items ,rank() over(order by num_items desc) as rk from 
oiu order by seller_id asc
) t where rk = 1

but! 

仅仅通过前两个案例。

于是经过一顿排查。直接在力扣上输出发现:按照品牌计数种类就不行,以案例3的seller_id = 26 为例,我们在原步骤中,在找到所有与最喜欢的品牌不同的所有订单后,不分组计数,也不去排名,而是直接输出筛选结果看看:

-- 每个订单中对应的品牌名
with oi as 
(
select order_id,seller_id, item_brand
from orders o join items i on o.item_id = i.item_id
)
,
-- 每个卖家卖了了几种非喜爱品牌
oiu as 
(
select oi.order_id,oi.seller_id,oi.item_brand,u.favorite_brand
-- count(distinct oi.item_brand) as num_items
from oi join users u on oi.seller_id = u.seller_id 
where oi.item_brand != u.favorite_brand and oi.seller_id = 26
-- group by oi.seller_id
)select * from oiu

输出结果

发现:它预期输出结果按照题目要求和案例解读中的意思,是26号卖家卖出了6与最喜爱的品牌不同的商品。

然后我们人为看一下输出结果,(321,131) 两个订单的品牌是一样的,(7,183)两个 订单的品牌也一样,两组只能算作两种品牌。也就是26号卖家卖出的与最喜爱的品牌不同的商品应该是4种

这就发现与题目的说法不同的地方了,这就是博主想吐槽的地方。

所以,想要通过这道题的所有案例,那就直接按照item_id去重计数才行。

所以,最终改成下面这样可以通过所有案例:

with oi as 
(
select order_id,seller_id, item_brand,o.item_id
from orders o join items i on o.item_id = i.item_id
)
,
-- 每个卖家卖了了几种非喜爱品牌
oiu as 
(
select oi.seller_id,
-- count(distinct oi.item_brand) as num_items
count(distinct oi.item_id) as num_itemsfrom oi join users u on oi.seller_id = u.seller_id 
where oi.item_brand <> u.favorite_brandgroup by oi.seller_id
)select seller_id,num_items from 
(		
select seller_id,num_items ,rank() over(order by num_items desc) as rk from 
oiu order by seller_id asc
) t where rk = 1

相关文章:

  • YOLO11改进,尺度动态损失函数Scale-based Dynamic Loss,减少标签不准确对损失函数稳定性的影响
  • 【网络安全】OWASP 十大漏洞
  • 蓝桥杯2024省A.成绩统计
  • 组件是怎样写的(1):虚拟列表-VirtualList
  • Activity之间交互
  • spark与hadoop的区别
  • Flutter 状态管理 Riverpod
  • 【Linux】多线程任务模块
  • 【Linux篇】轻松搭建命名管道通信:客户端与服务器的互动无缝连接
  • 卷积神经网络--手写数字识别
  • day33和day34图像处理OpenCV
  • 教育行业网络安全:守护学校终端安全,筑牢教育行业网络安全防线!
  • FastGPT Docker Compose本地部署与硅基流动免费AI接口集成指南
  • 【计算机网络】第五章 局域网技术
  • GPT,Genini, Claude Llama, DeepSeek,Qwen,Grok,选对LLM大模型真的可以事半功倍!
  • 形象理解华为云物联网iotDA开发流程
  • 批量导出多个文件和文件夹名称与路径信息到Excel表格的详细方法
  • AgentGPT开源程序可以在浏览器中组装、配置和部署自主人工智能代理
  • 高并发场景下的淘宝 API 开发实践:商品数据实时采集与性能优化
  • 修改IP地址能否精确到地级市的县?——全面解析
  • IPO周报|本周暂无新股申购,上周上市新股中签浮盈均超1.6万
  • 影子调查丨义门陈遗址建筑被“没收”风波
  • 经济日报:“关税讹诈”拦不住中国制造升级
  • 解除近70家煤电厂有毒物质排放限制,特朗普能重振煤炭吗?
  • 网络社群的早期历史及其启示
  • 海南热带雨林国家公园核心保护区一水电站设施将拆除,曾被中央环保督察通报