成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL點(diǎn)滴之使用with語(yǔ)句來(lái)寫(xiě)一個(gè)稍微復(fù)雜sql語(yǔ)句

數(shù)據(jù)庫(kù) SQL Server
偶爾看到sql中也有with關(guān)鍵字,好歹也寫(xiě)了幾年的sql語(yǔ)句,居然第一次接觸,無(wú)知啊。看了一位博主的文章,自己添加了一些內(nèi)容,做了簡(jiǎn)單的總結(jié),這個(gè)語(yǔ)句還是第一次見(jiàn)到,學(xué)習(xí)了。我從簡(jiǎn)單到復(fù)雜地寫(xiě),希望高手們不要見(jiàn)笑。

今天偶爾看到sql中也有with關(guān)鍵字,好歹也寫(xiě)了幾年的sql語(yǔ)句,居然***次接觸,無(wú)知啊。看了一位博主的文章,自己添加了一些內(nèi)容,做了簡(jiǎn)單的總結(jié),這個(gè)語(yǔ)句還是***次見(jiàn)到,學(xué)習(xí)了。我從簡(jiǎn)單到復(fù)雜地寫(xiě),希望高手們不要見(jiàn)笑。下面的sql語(yǔ)句設(shè)計(jì)到三個(gè)表,表的內(nèi)容我用txt文件復(fù)制進(jìn)去,這里不妨使用上一個(gè)隨筆介紹的建立端到端的package的方法將這些表導(dǎo)入到數(shù)據(jù)庫(kù)中,具體的就不說(shuō)了。

簡(jiǎn)單的聚合

從orders表中選擇各個(gè)年份共有共有多少客戶訂購(gòu)了商品

***種寫(xiě)法,我們可以寫(xiě)成這樣

  1. select YEAR(o.orderdate) orderyear,COUNT(distinct(custid)) numCusts  
  2. from Sales.Orders o  
  3. group by YEAR(o.orderdate)  
  4. go 

 要注意的是如果把group by YEAR(o.orderdata)換成group by orderyear就會(huì)出錯(cuò),這里涉及到sql語(yǔ)句的執(zhí)行順序問(wèn)題,有時(shí)間再了解一下          

第二種寫(xiě)法,

  1. select orderyear,COUNT(distinct(custid))numCusts  
  2. from (select YEAR(orderdate) as orderyear,custid from sales.orders) as D  
  3. group by orderyear  
  4. go  

在from語(yǔ)句中先得到orderyear,然后再select語(yǔ)句中就不會(huì)出現(xiàn)沒(méi)有這個(gè)字段的錯(cuò)誤了

第三種寫(xiě)法,

  1. select orderyear,COUNT(distinct(custid)) numCusts  
  2. from (select YEAR(orderdate),custid from sales.orders) as D(orderyear,custid)  
  3. group by orderyear  
  4. go  

在as D后面加上選擇出的字段,是不是更加的清楚明了呢!

第四種寫(xiě)法,with出場(chǎng)了

  1. with c as(  
  2. select YEAR(orderdate) orderyear, custid from sales.orders)  
  3. select orderyear,COUNT(distinct(custid)) numCusts from c group by orderyear  
  4. go  

with可以使語(yǔ)句更加的經(jīng)湊,下面是權(quán)威解釋。  
    
指定臨時(shí)命名的結(jié)果集,這些結(jié)果集稱為公用表表達(dá)式 (CTE)。該表達(dá)式源自簡(jiǎn)單查詢,并且在單條 SELECT、INSERT、UPDATE、MERGE 或 DELETE 語(yǔ)句的執(zhí)行范圍內(nèi)定義。該子句也可用在 CREATE VIEW 語(yǔ)句中,作為該語(yǔ)句的 SELECT 定義語(yǔ)句的一部分。公用表表達(dá)式可以包括對(duì)自身的引用。這種表達(dá)式稱為遞歸公用表達(dá)式。               
                                                ----MSDN

第五種寫(xiě)法,也可以借鑒第三種寫(xiě)法,這樣使語(yǔ)句更加清楚明了,便于維護(hù) 

  1. with c(orderyear,custid) as(  
  2.  select YEAR(orderdate),custid from sales.orders)  
  3.  select orderyear,COUNT(distinct(custid)) numCusts from c group by c.orderyear  
  4.  go  


上面5中寫(xiě)法都得到相同的結(jié)果,如下圖1:

 

圖1

添加計(jì)算

現(xiàn)在要求要求計(jì)算出訂單表中每年比上一年增加的客戶數(shù)目,這個(gè)稍微復(fù)雜 

  1. with yearcount as(  
  2.   select YEAR(orderdate) orderyear,COUNT(distinct(custid)) numCusts from sales.orders group by YEAR(orderdate))  
  3.   select cur.orderyear curyear,cur.numCusts curNumCusts,prv.orderyear prvyear,prv.numCusts prvNumCusts,cur.numCusts-prv.numCusts growth  
  4.   from yearcount cur left join yearcount prv on cur.orderyear=prv.orderyear+1  
  5.  go  

這里兩次使用到with結(jié)果集。查詢得到的結(jié)果如下圖2

圖2

復(fù)雜的計(jì)算

查找客戶id,這些客戶和所有來(lái)自美國(guó)的雇員至少有一筆交易記錄,查詢語(yǔ)句如下

  1. with TheseEmployees as(  
  2. select empid from hr.employees where country='USA'),  
  3. CharacteristicFunctions as(  
  4. select custid,  
  5.        case when custid in (select custid from sales.orders as o where o.empid=e.empid) then 1 else 0 end as charfun  
  6. from sales.customers as c cross join TheseEmployees as e)  
  7. select custid,min(charfun) from CharacteristicFunctions group by custid having min(charfun)=1  
  8. go  

這里嵌套with語(yǔ)句,第with語(yǔ)句查找美國(guó)雇員的id,第二個(gè)語(yǔ)句使用這個(gè)結(jié)果和擁有客戶的客戶id和擁有關(guān)系標(biāo)識(shí)做笛卡爾積運(yùn)算。***從這個(gè)笛卡爾積中通過(guò)標(biāo)識(shí)找到最終的custid。

結(jié)果如下圖3

圖3

這里只有簡(jiǎn)單地介紹,沒(méi)有深入,高手們不要見(jiàn)笑啊。

 

【編輯推薦】

  1. SQL點(diǎn)滴之使用attach功能出現(xiàn)錯(cuò)誤及解決方法
  2. SQL點(diǎn)滴之一個(gè)簡(jiǎn)單的字符串分割函數(shù)
  3. SQL點(diǎn)滴之重置win7登錄密碼對(duì)SQL登錄的影響
  4. SQL點(diǎn)滴之SSIS中的事務(wù)處理
責(zé)任編輯:艾婧 來(lái)源: 博客園
相關(guān)推薦

2011-09-09 10:10:13

SQL數(shù)據(jù)庫(kù)點(diǎn)滴

2011-08-02 13:04:40

SQL Server

2011-04-28 09:49:56

SQLwith子查詢

2011-04-20 11:11:33

SQLSET QUOTED_

2018-11-05 14:54:18

MySQLSQL語(yǔ)句數(shù)據(jù)庫(kù)

2016-09-28 17:34:27

JavaScriptvueWeb

2011-10-09 16:40:50

T-SQL

2010-09-06 10:38:25

SQL Server語(yǔ)句

2010-11-11 11:37:22

SQL SELECT語(yǔ)

2010-09-26 10:08:43

sql條件語(yǔ)句

2010-11-09 15:30:01

Sql server時(shí)

2010-09-25 11:02:33

SQL主鍵

2010-09-17 16:53:14

SQL中CREATE

2009-09-07 16:25:14

Linq To SQL

2021-04-08 09:49:49

MySQL索引數(shù)據(jù)庫(kù)

2010-09-03 15:47:40

SQL語(yǔ)句鎖定

2010-09-03 14:39:15

SQLSELECT語(yǔ)句

2011-06-23 14:00:51

SQL點(diǎn)滴

2010-09-03 13:21:01

SQL刪除

2021-11-24 22:57:23

MySQLSQL數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91视视频在线观看入口直接观看 | 91人人澡人人爽 | 国产一区欧美一区 | 一区二区三区在线免费观看视频 | 黄色网页在线观看 | 欧美成人a∨高清免费观看 91伊人 | 国产xxxx搡xxxxx搡麻豆 | 成人免费一区二区三区牛牛 | 国产一区二区日韩 | 九九视频网 | 欧美日韩不卡合集视频 | 91欧美激情一区二区三区成人 | 国产欧美一区二区三区在线看蜜臀 | 成人午夜在线 | 色啪网 | 91视频精选| 亚洲国产成人在线观看 | 亚洲精品99 | 久久精品毛片 | 91在线免费观看 | 在线观看久草 | 国产精品福利视频 | 精品久久久一区 | 一区二区三区国产精品 | 中文字幕一区二区三区在线观看 | 免费黄色的视频 | 91在线电影 | 99pao成人国产永久免费视频 | 亚洲在线一区二区 | 国产精品日韩 | 成人性生交大片免费看中文带字幕 | 麻豆国产一区二区三区四区 | 热久久999| 日韩欧美网 | 亚洲一区在线免费观看 | 欧产日产国产精品视频 | 日韩av一区二区在线观看 | www狠狠爱com | 欧美在线资源 | 亚洲精品久久久久久国产精华液 | 国产情侣在线看 |