Sql學習第九天——SQL 關於over


Sql學習第九天——SQL 關於over

以前總是認為over是與row_number()結合使用的,今天突然發現它還可以與count()結合。現在就來看看它是怎樣與over結合的吧!

還是從例子中理解它:

建表([dbo].[Orders]  字段說明:orderid -- 訂單id  , customerid -- 消費者id):

CREATE TABLE [dbo].[Orders](
    [orderid] [int] NOT NULL,
    [customerid] [char](5) COLLATE Chinese_PRC_CI_AS NULL,
PRIMARY KEY CLUSTERED 
(
    [orderid] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

向表插入數據:

insert into dbo.Orders values(1,'FRNDO');
insert into dbo.Orders values(2,'FRNDO');
insert into dbo.Orders values(3,'KRLOS');
insert into dbo.Orders values(4,'KRLOS');
insert into dbo.Orders values(5,'KRLOS');
insert into dbo.Orders values(6,'MRPHS');
insert into dbo.Orders values(7,null);

查詢插入的數據:

select * from dbo.orders

結果如圖:

直接上三條sql語句比較進行對比說明,這樣比較明了。

sql語句一(簡單的查詢所有的數據):

select * from dbo.Orders

sql語句二(用到了count與over的結合):

select orderid , customerid,count(*) over(partition by customerid) as num_orders
from orders

sql語句三(用到了count與over的結合並且帶上了條件):

select orderid , customerid,count(*) over(partition by customerid) as num_orders
from orders
where customerid is not null and orderid%2 = 1

結果分析圖:

 

看完圖可能都會明白是怎么一回事兒了,對於partition by 我前面有說(查看請點次鏈接)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM