| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5015 人关注过本帖
标题:请教聚合函数sum()用法
只看楼主 加入收藏
施南人
Rank: 2
等 级:论坛游民
帖 子:40
专家分:27
注 册:2013-5-19
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:15 
请教聚合函数sum()用法
现有一张学生基本信息表xxxx.dbf,表中有若干个学校,每个学校有若干个学生,学生分为两种类别,应届毕业生和复读生。现用sum()统计各学校的应届毕业生(或者用coun(*))时,当某个学校如果没有应届毕业生时,统计表中就没有这个学校的名称,即当应届毕业生数为0时,就不显示这个学校。我现在需要显示这个学校的名称,应届毕业生数为0,如何做到?
搜索更多相关主题的帖子: 毕业生 复读生 统计表 如何 学校 
2013-06-19 15:51
施南人
Rank: 2
等 级:论坛游民
帖 子:40
专家分:27
注 册:2013-5-19
收藏
得分:0 
假设共有10个学校,其中有一个学校没有应届毕业生
sele 毕业学校,sum(iif(类别='应届毕业生',1,0)) from xxxx grou by 1 into dbf rstj,得到的rstj表中就只有9条记录,即有9所学校有应届毕业生。现在需要rstj表共10条记录,其中没有应届毕业生的学校数值为0,如何实现?
2013-06-19 16:05
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:5 
SELECT 毕业学校, COUNT(类别) 应届毕业生人数 ;
   FROM xxxx ;
   WHERE 类别='应届毕业生' ;
   GROUP BY 毕业学校 ;
UNION ALL ;
SELECT 毕业学校, 0 应届毕业生人数 ;
   FROM xxxx ;
   WHERE 毕业学校 NOT IN ;
      (SELECT DISTINCT 毕业学校 FROM xxxx ;
          WHERE 类别='应届毕业生') ;
   ORDER BY 应届毕业生人数

这条命令可以实现你的要求。


[ 本帖最后由 taifu945 于 2013-6-19 16:22 编辑 ]
2013-06-19 16:10
施南人
Rank: 2
等 级:论坛游民
帖 子:40
专家分:27
注 册:2013-5-19
收藏
得分:0 
谢谢楼上的,我需要的是统计出各学校的应届毕业生人数。
2013-06-19 16:20
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用施南人在2013-6-19 16:20:33的发言:

谢谢楼上的,我需要的是统计出各学校的应届毕业生人数。

已经修改过了。
2013-06-19 16:23
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:15 
程序代码:
*VFP9代码
CREATE CURSOR T (名称 C(10),类别 C(10))
INSERT INTO T VALUES ([A],[应届])
INSERT INTO T VALUES ([A],[复读])
INSERT INTO T VALUES ([B],[应届])
INSERT INTO T VALUES ([B],[复读])
INSERT INTO T VALUES ([C],[复读])
INSERT INTO T VALUES ([D],[应届])
SELECT 名称,类别 FROM (SELECT DISTINCT 名称 FROM T) A,(SELECT DISTINCT 类别 FROM T) B INTO CURSOR T1
SELECT A.名称,A.类别,NVL(RS,0) 人数 FROM T1 A LEFT JOIN (SELECT 名称,COUNT(*) RS,类别 FROM T GROUP BY 类别,名称) B ON A.名称=B.名称 AND A.类别=B.类别
结果
图片附件: 游客没有浏览图片的权限,请 登录注册

坚守VFP最后的阵地
2013-06-19 16:30
施南人
Rank: 2
等 级:论坛游民
帖 子:40
专家分:27
注 册:2013-5-19
收藏
得分:0 
回复 6楼 sdta
谢谢!其实只要增加nvl()这个函数就行了。
sele 毕业学校,nvl(sum(iif(类别='应届毕业生',1,0))) as 应届毕业生人数 from xxxx grou by 毕业学校
2013-06-19 17:02
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用施南人在2013-6-19 17:02:17的发言:

谢谢!其实只要增加nvl()这个函数就行了。
sele 毕业学校,nvl(sum(iif(类别='应届毕业生',1,0))) as 应届毕业生人数 from xxxx grou by 毕业学校
你这行代码未必能达到要求吧

坚守VFP最后的阵地
2013-06-19 17:35
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用施南人在2013-6-19 17:02:17的发言:

谢谢!其实只要增加nvl()这个函数就行了。
sele 毕业学校,nvl(sum(iif(类别='应届毕业生',1,0))) as 应届毕业生人数 from xxxx grou by 毕业学校

你这条命令不对的。其它不说,就说NVL()函数的语法,它两个参数都不能省略。你这条命令中的第二个参数呢?
2013-06-19 18:53
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用施南人在2013-6-19 17:02:17的发言:

谢谢!其实只要增加nvl()这个函数就行了。
sele 毕业学校,nvl(sum(iif(类别='应届毕业生',1,0))) as 应届毕业生人数 from xxxx grou by 毕业学校

你这条命令不对的。其它不说,就说NVL()函数的语法,它两个参数都不能省略。你这条命令中的第二个参数呢?
2013-06-19 18:53
快速回复:请教聚合函数sum()用法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019215 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved