zoukankan      html  css  js  c++  java
  • 数据库单表关联实现数据计数功能(表格自身关联)

    数据库单表关联实现数据计数功能(表格自身关联)

    注:本博文为博主原创,转载请注明出处。

        问题提出:在数据库中有这样一张表格,其中主要包含三个字段,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');
  • 相关阅读:
    C语言-if语句
    C语言-表达式
    C语言-基础
    Java for LeetCode 187 Repeated DNA Sequences
    Java for LeetCode 179 Largest Number
    Java for LeetCode 174 Dungeon Game
    Java for LeetCode 173 Binary Search Tree Iterator
    Java for LeetCode 172 Factorial Trailing Zeroes
    Java for LeetCode 171 Excel Sheet Column Number
    Java for LeetCode 169 Majority Element
  • 原文地址:https://www.cnblogs.com/DonaHero/p/6059466.html
Copyright © 2011-2022 走看看