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 我前面有說(查看請點次鏈接)。
