SQL语句练习实例之二——找出销售冠军

 更新时间:2011年10月07日 00:27:05   作者:  
在公司中,老板走进来,要一张每个地区销量前3名的销售额与销售员的报表
复制代码 代码如下:

--销售冠军
--问题:在公司中,老板走进来,要一张每个地区销量前3名的销售额与销售员的报表
---
create table salesdetail
(
Area int not null,
Saler nvarchar(20) not null,
SalerId int not null,
Sales money not null
)
insert salesdetail
select 1,'张三',15,3000
union select 1,'赵一',16,3500
union select 1,'钱二',17,4000
union select 1,'孙三',18,5000
union select 1,'李四',19,5000
union select 1,'王五',11,7000
union select 2,'周边一',25,3000
union select 2,'李白',22,4000
union select 2,'张镇东',23,6000
union select 2,'李宁',24,1000
union select 3,'李斯',35,3000
union select 3,'李勇',33,2000
union select 4,'李逵',44,5000
union select 4,'宋江',45,5000
union select 4,'吴用',42,13000
union select 4,'公孙胜',43,23000
union select 5,'阮小二',51,5000
union select 5,'阮小五',52,5000
union select 5,'林冲',53,5000
union select 5,'林莽',54,6000
go
---以下这种写法SQL语句会主动把最小的那一个销售额的所有行,都自动删除,只能得到比最小销售额大的数据
--如果你的最小销售额有3行,最大的只有一行,如地区5所示,只会得到最大的那一行。
--地区4只能得到二行,原因同上。
select * from salesdetail as a
where sales >= (select min(b.sales)
from salesdetail as b where a.Area=b.Area and a.Sales<=b.Sales
--group by sales
having COUNT(distinct b.Saler)<=3)
order by a.Area,a.Sales desc,a.Saler,a.SalerId
go
---使用rank()为每个分区中的每一行分配一个顺序号,如果有重复值,它们都将分配相同的顺序号。
select a.area,a.saler,seq from
(
select area,saler,RANK() over(PARTITION by area order by sales desc) as seq from salesdetail
)a where seq<=3
drop table salesdetail

相关文章

  • SQLSERVER 出现死锁查找方法和解决办法(推荐)

    SQLSERVER 出现死锁查找方法和解决办法(推荐)

    这篇文章主要介绍了SQLSERVER 出现死锁查找方法和解决办法(推荐),文中讲解了查询死锁语句,杀死死锁的解决方法,需要的朋友可以参考下
    2024-02-02
  • 学习SQL语句(强大的group by与select from模式)

    学习SQL语句(强大的group by与select from模式)

    本文介绍的是强大的group by使用与利用select from (select from)的模式生成SQL语句的代码。
    2011-10-10
  • sqlserver 数据库压缩与数据库日志(ldf)压缩方法分享

    sqlserver 数据库压缩与数据库日志(ldf)压缩方法分享

    数据库在使用中,冗余的数据不断的增加(数据删除也不会减小),导致数据库不断的增大!所以该给你的数据库减减肥了
    2011-12-12
  • SQL Server 获取服务器时间的sql语句

    SQL Server 获取服务器时间的sql语句

    这篇文章主要介绍了SQL Server 获取服务器时间的sql语句,需要的朋友可以参考下
    2016-07-07
  • SQL Server的触发器详解

    SQL Server的触发器详解

    这篇文章主要为大家介绍了SQL Server的触发器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • SQL Server查看login所授予的具体权限问题

    SQL Server查看login所授予的具体权限问题

    在SQL Server数据库中如何查看一个登录名(login)的具体权限呢,下面脚本之家小编给大家带来了SQL Server查看login所授予的具体权限问题,感兴趣的朋友一起看看吧
    2019-09-09
  • SQL server数据库日志文件收缩操作方法

    SQL server数据库日志文件收缩操作方法

    日常使用数据库可能存在日志每天增长10G或以上,太恐怖了!数据量过大导致服务器卡死,内存溢出,执行Sql过慢等问题,这篇文章主要给大家介绍了关于SQL server数据库日志文件收缩操作的相关资料,需要的朋友可以参考下
    2024-02-02
  • Oracle与SqlServer的区别大吗

    Oracle与SqlServer的区别大吗

    这篇文章主要介绍了Oracle与SqlServer的区别大吗,差异主要表现在数据类型区别、数据表个数查询的区别以及oracle区分表字段的大小写,SQL Server 不区分表字段的大小写,具体细节跟随小编一起学习下吧
    2024-02-02
  • 非常好用的sql语句(日常整理)

    非常好用的sql语句(日常整理)

    本文给大家分享几个比较好用的sql语句,在数据库中经常会用到,需要的朋友可以参考下本篇文章。
    2015-09-09
  • SQL Server数据库中设置索引的策略分享

    SQL Server数据库中设置索引的策略分享

    在 SQL Server 中,索引通过加快数据检索速度在优化查询性能方面发挥着关键作用,在数据库中设置索引的策略受数据库结构、表的大小和将要运行的查询类型的影响,以下是如何将索引应用于这些不同类型的表的详细分类,需要的朋友可以参考下
    2024-12-12

最新评论