SQL:排名前几名中的前几名
2022/8/28 2:22:57
本文主要是介绍SQL:排名前几名中的前几名,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.选择订单量排名前2的商品,并且选出每个商品订单量排名前3的销售方式,模拟数据如下:
name作为商品,count作为对应渠道的订单量,way为渠道
通过excel法线,前两名存在3个:
如果使用limit 2,会漏掉一个商品:(下面order by 应该用降序,写错了,加上desc即可)
也可以加上distinct 和子查询改进,这里考虑使用窗口函数:
select * from
(
select name,dense_rank()over( order by num desc) ranking
from
(select name,sum(count) as num
from 模拟.sid
group by name
order by num desc
) t
) t2
where ranking <=2
找出了排名前2的商品,然后找订单量前3的渠道
select name,way,count,
dense_rank()over(partition by name order by count desc) r2
from 模拟.sid
然后将两个用商品名称连接:
用excel检查没问题:
2.选择num1排名前2中的前3num2,模拟数据:
select id,num1,r1,r2 from
(
select id,num1,
dense_rank()over(order by num1 desc) r1,
dense_rank()over(partition by num1 order by num2 desc) r2
from 模拟.sid2
) a
where r1 <=2
and r2 <=3
用excel检查没问题
注意经典错误:使用xxx where ()in(xxx limit )
补充:
SQL去重:
假设table表中有字段a、b、c,现需要对字段a、b进行去重,在SQL中通常有三种方法能够实现去重的功能:
1) DISTINCT 关键字 使用DISTINCT去重的方法很简单,在查询数据时在字段前增加DISTINCT关键字既可对字段内容进行去重。如下代码将输出table表中字段a和b的组合不重复的数据: SELECT DISTINCT a,b FROM table;
2) GROUP BY关键字 使用GROUP BY进行去重的方法和DISTINCT类似,仅需在查询语句末端增加GROUP BY即可,而且能够对分组数据进行筛选。 SELECT a, b FROM table GROUP BY a, b;
3) 窗口函数 使用窗口函数进行去重时,比DISTINCT和GROUP BY稍微复杂些,可以采用窗口函数+over(partition by 去重字段)的方式。去重方式如下: -- 窗口函数+over(partition by 去重字段),其中窗口函数可采用row_number SELECT a, b FROM( SELECT *, row_number() over(partition by a, b order by c) rank_id FROM table ) A WHERE rank_id = 1;
这篇关于SQL:排名前几名中的前几名的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行