当前位置:首页 > 开发 > 数据库 > 正文

分组统计记录数,并统计各分组数据的各分项情况的SQL(DB2)

发表于: 2008-12-17   作者:crabdave   来源:转载   浏览次数:
摘要: 分组统计记录数,并统计各分组数据的各分项情况的SQL(DB2)   环境描述:假设有两张表一张是商品表(product),一张定单表(order)商品表(product)结构如下:proId proName1          商品12     

分组统计记录数,并统计各分组数据的各分项情况的SQL(DB2)

 

环境描述:
假设有两张表一张是商品表(product),一张定单表(order)
商品表(product)结构如下:
proId proName
1          商品1
2          商品2
3          商品3
proId表示商品id, proName表示商品名称

定单表(order)结构如下:
id    orderName     isDeal   proId
1       定单1                Y       1
2       定单2                N       2
3       定单3                N       2
4       定单4                Y       3
5       定单5                Y       1
id表示定单的id,orderName表示定单名称,isDeal表示是否已成交(Y表示已成交,N表示未成交),proId是商品id是一个外键。

DDL如下:

-- product

 

CREATE TABLE  TEST . product
 ( proId   DECIMAL(10, 0),
   proName VARCHAR(50)
 )
  DATA CAPTURE NONE;

#SYNC 10;

ALTER TABLE  TEST . product
  LOCKSIZE ROW
  APPEND OFF
  NOT VOLATILE;

#SYNC 20;

RUNSTATS ON TABLE  TEST . product
  AND INDEXES ALL
  SHRLEVEL REFERENCE;

#SYNC 30;

 

-- order

 

CREATE TABLE  TEST . order
 ( id          DECIMAL(10, 0),
   orderName   VARCHAR(50),
   isDeal      VARCHAR(10),
   proId       DECIMAL(10, 0)
 )
  DATA CAPTURE NONE;

#SYNC 10;

ALTER TABLE  TEST . order
  LOCKSIZE ROW
  APPEND OFF
  NOT VOLATILE;

#SYNC 20;

RUNSTATS ON TABLE  TEST . order
  AND INDEXES ALL
  SHRLEVEL REFERENCE;

#SYNC 30;

 

--insert

  insert into PRODUCT values(1,'商品1');
  insert into PRODUCT values(2,'商品2');
  insert into PRODUCT values(3,'商品3');
 
  insert into ORDER values(1,'定单1','Y',1);
  insert into ORDER values(2,'定单2','N',2);
  insert into ORDER values(3,'定单3','N',3);
  insert into ORDER values(4,'定单4','Y',2);
  insert into ORDER values(5,'定单5','Y',1);

 

现在需要统计每种商品有多少个定单,每种商品的定单成交和未成交的数量。

 

解决方案:

select count(proId) as count,proName,sum(case when isDeal='Y' then 1 else 0 end) as isDeal,sum(case when isDeal='N' then 1 else 0 end) isNotDeal
  from (
        select pro.proName,ord.orderName,ord.isDeal,ord.proId from product pro,order ord where pro.proId=ord.proId
       ) as a1 where 1=1 group by proId,proName;

 

得到的结果为:

 

count    proName   isDeal     isNotDeal

2
            商品1
        2
               0
2
            商品2
1
1
1
            商品3
0
1

其中第一列count表示定单数量,第二列proName表示商品名称,第三列isDeal表示已成交的定单数量,第四列isNotDeal表示未成交的定单数量。

分组统计记录数,并统计各分组数据的各分项情况的SQL(DB2)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
转自:http://xuzhaoshancm.blog.163.com/blog/static/51118891200981454846536/ 首先创建数据表IP
有 字段A 和B 比如数据如下 A B 1 2 1 3 1 4 2 2 2 3 统计出的sql结果: A count 1 3 2 2 select a,
http://localhost:8983/solr/select?q=*:*&stats=true&stats.field=price&stats.field=popularity&r
设计时实现的分组统计: 运行时实现的分组统计: //前期只需要添加 ClientDataSet1、DataSource1、DBG
前几天遇到的一个问题,要统计一个表中的一些数据,表的样式如下: 现在要统计ZhouYi到ZhouRi列中,
查询出公司每个月支出的工资总和 --查询出公司每个月支出的工资总和 SELECT SUM(sal) FROM emp; 查
使用 GROUPING SETS 的 GROUP BY 子句可以生成一个等效于由多个简单 GROUP BY 子句的 UNION ALL 生
从 坏空格(NoKDD)的80% 博客中发现用数据透视表也可以进行数据分组,并且很方便,我也动手试了下,
本文出处:http://www.cnblogs.com/rexying/archive/2007/09/29/910560.html girdview分组,统计,
今天的在工作中遇到需要在接口调用记录表中统计数据, 初步实现使用存储过程. 发现查询次数过多且效
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号