ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL:排名前几名中的前几名

2022-08-27 14:00:08  阅读:215  来源: 互联网

标签:name DISTINCT over rank 几名 SQL 排名 order desc


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;

 

标签:name,DISTINCT,over,rank,几名,SQL,排名,order,desc
来源: https://www.cnblogs.com/djbwxh/p/16630462.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有