你真的會玩SQL嗎?冷落的Top和Apply

2021-09-07 03:37:25 字數 4962 閱讀 3303

你真的會玩sql嗎?系列目錄

你真的會玩sql嗎?之邏輯查詢處理階段

你真的會玩sql嗎?和平大使 內連線、外連線

你真的會玩sql嗎?三正規化、資料完整性

你真的會玩sql嗎?查詢指定節點及其所有父節點的方法

你真的會玩sql嗎?讓人暈頭轉向的三值邏輯

你真的會玩sql嗎?exists和in之間的區別

你真的會玩sql嗎?無處不在的子查詢

你真的會玩sql嗎?case也瘋狂

你真的會玩sql嗎?表表示式,排名函式

你真的會玩sql嗎?簡單的 資料修改

你真的會玩sql嗎?你所不知道的 資料聚合

你真的會玩sql嗎?透視轉換的藝術

你真的會玩sql嗎?實用函式方法彙總

你真的會玩sql嗎?玩爆你的資料包表之儲存過程編寫(上)

你真的會玩sql嗎?玩爆你的資料包表之儲存過程編寫(下)

返回每個雇員的3個最新訂單:

select

empid ,

orderid ,

custid ,

orderdate ,

requireddate

from sales.orders as

o1where orderid in ( select

top3

orderid

from sales.orders as

o2

where o2.empid =

o1.empid

order

by orderdate desc

, orderid

desc )

select

e.empid ,

a.orderid ,

a.custid ,

a.orderdate ,

a.requireddate

from hr.employees as

e

top3

orderid ,

custid ,

orderdate ,

requireddate

from sales.orders as

o

where o.empid =

e.empid

order

by orderdate desc

, orderid

desc

) as a

先掃瞄employees 獲得empid,對每個empid值對orders表查詢返回 該雇員的3個最新訂單。這裡可以返回多個屬性。

如下:

select

orderid ,

custid ,

orderdate ,

requireddate

from ( select

orderid ,

custid ,

orderdate ,

requireddate ,

row_number()

over ( partition by empid order

by orderdate desc , orderid desc ) as

rownum

from

sales.orders

) asd

where rownum <=

3

練習:

從學生表中選取對應班級的前num名學生成績

--顯示結果

/*bj xh name cj

---------- ---- ---------- -----------

一班 a006 a6 100

一班 a005 a5 99

一班 a001 a1 89

一班 a002 a2 89

二班 b001 b7 100

二班 b001 b6 99

二班 b001 b9 97

二班 b001 b8 90

二班 b001 b5 88

*/

--

建立測試表

declare

@student

table( --

-學生表

bj varchar(10), --

班級xh char(4), --

學號name varchar(10), --

姓名

cj int) --

成績declare

@tjtable( --

-統計表

bj varchar(10), --

班級num int) --

人數 :從學生表中選取對應班級的前num名學生成績

set nocount on

--新增測試資料

insert

@student

select'一班

' ,'

a001

','a1

',89

insert

@student

select'一班

' ,'

a002

','a2

',89

insert

@student

select'一班

' ,'

a003

','a3

',59

insert

@student

select'一班

' ,'

a004

','a4

',80

insert

@student

select'一班

' ,'

a005

','a5

',99

insert

@student

select'一班

' ,'

a006

','a6

',100

insert

@student

select'一班

' ,'

a007

','a7

',82

insert

@student

select'二班

' ,'

b001

','b1

',19

insert

@student

select'二班

' ,'

b001

','b2

',81

insert

@student

select'二班

' ,'

b001

','b3

',69

insert

@student

select'二班

' ,'

b001

','b4

',86

insert

@student

select'二班

' ,'

b001

','b5

',88

insert

@student

select'二班

' ,'

b001

','b6

',99

insert

@student

select'二班

' ,'

b001

','b7

',100

insert

@student

select'二班

' ,'

b001

','b8

',90

insert

@student

select'二班

' ,'

b001

','b9

',97

insert

@tjselect'一班

',3insert

@tjselect'二班

',5

--

2005.t-sql

select

t.bj,s.xh,s.name,s.cj

from

@tjt

cross

select

top(t.num)

with ties --

加 with ties,一班將選出4個人(2個人並列第三名)

xh,name,cj

from

@student

where t.bj=bj --

加where 功能類似於 inner join ;不加類似於 cross join

order

by cj desc

)sorder

bycase

when t.bj='一班

'then

1else

2end

asc,s.cj desc,s.xh asc

---排序

你真的會玩SQL嗎?Top和Apply

原文 返回每個雇員的3個最新訂單 select empid orderid custid orderdate requireddate from sales.orders as o1where orderid in select top3 orderid from sales.orders as o...

你真的會玩SQL嗎?簡單的資料修改

你真的會玩sql嗎?系列目錄 你真的會玩sql嗎?之邏輯查詢處理階段 你真的會玩sql嗎?和平大使 內連線 外連線 你真的會玩sql嗎?三正規化 資料完整性 你真的會玩sql嗎?查詢指定節點及其所有父節點的方法 你真的會玩sql嗎?讓人暈頭轉向的三值邏輯 你真的會玩sql嗎?exists和in之間的...

你真的會玩SQL嗎?簡單的資料修改

你真的會玩sql嗎?系列目錄 你真的會玩sql嗎?之邏輯查詢處理階段 你真的會玩sql嗎?和平大使 內連線 外連線 你真的會玩sql嗎?三正規化 資料完整性 你真的會玩sql嗎?查詢指定節點及其所有父節點的方法 你真的會玩sql嗎?讓人暈頭轉向的三值邏輯 你真的會玩sql嗎?exists和in之間的...