程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL語句演習實例之二——找出發賣冠軍

SQL語句演習實例之二——找出發賣冠軍

編輯:MSSQL

SQL語句演習實例之二——找出發賣冠軍。本站提示廣大學習愛好者:(SQL語句演習實例之二——找出發賣冠軍)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL語句演習實例之二——找出發賣冠軍正文



--發賣冠軍
--成績:在公司中,老板走出去,要一張每一個地域銷量前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
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved