在存储过程中使用临时表

     有时候需要在适当的时候,使用临时表,来建立我们的存储过程,对于提高效率有一定的帮助。 如有时候我们需要从其他表当中查出结果,然后再对其结果集进行处理,最后再得到到我们想要的数据。

    比如有两个表一个Article(ArticleID,UserID,ArticleName,ArticleType)文章类型有通过,或者未通过,,User(UserID,UserName)。现在我们要统计每个用户通过与未通过的文章的数目。

现建两个表并且插入初始数据

用户表

Create Table Users (UserID int primary key,UserName char(20));
insert Users value(1,'zeng');
insert Users value(2,'wang');

文章表

Create Table Article (ArticleID int primary key,UserID int,ArticleName char(40),ArticleType int);
insert Article value(1,1,'How Create procedure',1);
insert Article value(2,1,'Create',0);
insert Article value(3,2,'temporary table',1);

下面我们建立一个存储过程来实现这个题目,并且建立了三个临时表

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`ProGetCount` $$
CREATE PROCEDURE `ProGetCount`()
BEGIN
     create Temporary table t (UserID int,UserName varchar(100),total int);
     create Temporary table t1(UserID int,UserName varchar(100),UnPass int);
     create Temporary table t2 (UserID int,UserName varchar(100),Pass int);
       /*find all count for every User and insert into t*/
      Insert into t
     select A.UserID,UserName,count(A.UserID) from Article a,users u
     where A.UserID = U.UserID
     group by A.UserID;

      /*find UnPass count for every user and insert into t1*/
      insert into t1
      select A.UserID,UserName,count(A.UserID) from Article a,users u
     where A.UserID = U.UserID and ArticleType = 0
     group by A.UserID,UserName;

      /*find pass count for every user and insert into t2*/
      insert into t2
      select A.UserID,UserName,count(A.UserID) from Article a,users u
     where A.UserID = U.UserID and ArticleType = 1
     group by A.UserID,UserName;

      /*show dataset for all the Stat*/
      select t.UserID,t.UserName,Pass,UnPass,total
     from t t
     left join t1 t1 on t.UserID = t1.UserID
     left join t2 t2 on t.UserID = t2.UserID;
END $$

DELIMITER ;

最后只要执行

call ProGetCount()

就会得到如下结果。

UserID

UserNamePassUnPassTotal
1zeng112
2wang1null1


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值