如何从product表中查询销量最低的前三款产品?
如何修改SQL获取销量最低的前三款产品?
首先先明确我们的基础数据:现有product表的结构和数据如下:
proID Proname sellprice qty_istock qty_outstock remark 001 fish 20,000 5 20 Paid 002 tofu 5,000 2 32 paid 003 desert 10,000 10 50 paid 004 Salad 30,000 9 5 paid 005 wisky 12,000 100 2 paid 006 sprite 5,000 200 40 paid
原来的SQL逻辑是用DENSE_RANK()按销量降序排名,以此获取销量最高的前三款产品:
SELECT * FROM ( SELECT *, DENSE_RANK() OVER (ORDER BY qty_outstock DESC) dr FROM product ) t WHERE dr <= 3;
现在要获取销量最低的前三产品,并且只返回PID(对应原表的proID)和qty_outstock两列,只需要做两处关键调整:
- 把排名的排序方向从降序(
DESC)改成升序(ASC),让销量最低的产品排在最前面,排名从1开始计数。 - 外层查询只选择需要的列,同时给
proID起别名PID,匹配你想要的输出格式。
修改后的最终SQL如下:
SELECT proID AS PID, qty_outstock FROM ( SELECT *, DENSE_RANK() OVER (ORDER BY qty_outstock ASC) dr FROM product ) t WHERE dr <= 3;
执行这段SQL后,就能得到你预期的结果:
PID qty_outstock 005 2 004 5 001 20
这里保留DENSE_RANK()的原因是,如果存在多个产品销量相同且属于前三范围的情况,它们会被赋予相同的排名,不会被遗漏(比如若有两款产品销量都是2,都会被包含在结果中)。
内容的提问来源于stack exchange,提问作者Sai
相关产品推荐
相关产品推荐

