數據庫單表關聯實現數據計數功能(表格自身關聯)


數據庫單表關聯實現數據計數功能(表格自身關聯)

注:本博文為博主原創,轉載請注明出處。

 

    問題提出:在數據庫中有這樣一張表格,其中主要包含三個字段,GoodsId(貨物編號),TypeId(類型編號),State(狀態)。貨物編號不重復,GoodsId與TypeId之間屬於N對1的關系,State為狀態主要分為兩種“null”和“1”,“null”表示該貨物未賣出UnSold,“1”表示貨物Sold。現在有如下業務,統計出類型編號下有多少貨物Sold,多少貨物UnSold。

    數據庫中的表格數據如下:

    最后需要統計出(輸出)的結果為:

    問題分析:在上述問題中無疑所要用到的重點就是表格自身關聯,以及計數方法count函數,以及分組group by等。在此根據題目提出的問題,我們需要用到的表格連接方法為內連接(inner join)。因為在表中存在至少一個匹配時,INNER JOIN 關鍵字返回行。

    問題解決:根據所描述的問題,以及對於問題的分析,設計了如下sql。

1 select g1.TypeId,count(*)AS Sold,g3.UnSold from Goods g1 
2 inner join 
3 (select TypeId,count(*)AS UnSold from Goods g2 WHERE State='null'
4 group by g2.TypeId) g3 
5 on g1.TypeId = g3.TypeId
6 WHERE State ='1' group by g1.TypeId,g3.UnSold

    附件:為了讓大家更好的去實踐,博主特將建表語句以及插入語句貼出。以供大家學習。

 1 -- 建表語句
 2 CREATE TABLE Goods(
 3     GoodsId VARCHAR(255),
 4     TypeId VARCHAR(255),
 5     State VARCHAR(255)
 6 );
 7 
 8 --- 插入語句
 9 insert into Goods(GoodsId,TypeId,State) values('001','1','1');
10 insert into Goods(GoodsId,TypeId,State) values('002','1','null')
11 insert into Goods(GoodsId,TypeId,State) values('003','1','null');
12 insert into Goods(GoodsId,TypeId,State) values('004','1','null');
13 insert into Goods(GoodsId,TypeId,State) values('005','1','null');
14 insert into Goods(GoodsId,TypeId,State) values('006','1','1');
15 insert into Goods(GoodsId,TypeId,State) values('001','2','1');
16 insert into Goods(GoodsId,TypeId,State) values('002','2','null');
17 insert into Goods(GoodsId,TypeId,State) values('003','2','null');
18 insert into Goods(GoodsId,TypeId,State) values('004','2','1');
19 insert into Goods(GoodsId,TypeId,State) values('005','2','null');
20 insert into Goods(GoodsId,TypeId,State) values('006','2','null');
21 insert into Goods(GoodsId,TypeId,State) values('007','2','1');
22 insert into Goods(GoodsId,TypeId,State) values('008','2','null');
23 insert into Goods(GoodsId,TypeId,State) values('001','3','1');
24 insert into Goods(GoodsId,TypeId,State) values('002','3','null');
25 insert into Goods(GoodsId,TypeId,State) values('003','3','null');

 


免責聲明!

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



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