标题:请教用select count()统计多项内容
只看楼主
zengjun81357
Rank: 2
等 级:论坛游民
帖 子:73
专家分:20
注 册:2011-3-27
结帖率:87.5%
 问题点数:0 回复次数:10 
请教用select count()统计多项内容
人员表.dbf有姓名,部门,学历三个字段,怎样用select count()统计各部门的各种学历(大学专科高中)人数
SELECT 所在部门,COUNT(*) as 本科 FROM 人员表 where 学历='本科' GROUP by 所在部门 all
SELECT 所在部门,COUNT(*) as 专科 FROM 人员表 where 学历='专科' GROUP by 所在部门 all
SELECT 所在部门,COUNT(*) as 高中 FROM 人员表 where 学历='高中' GROUP by 所在部门 all

上面三条命令可以分别统计各部门本科专科高中人数
问:1.上面命令中怎样将统计为0的部门也显示出来,就是显示所有部门
2.三条命令怎样输出到同一个表中,比如统计结果表(统计结果不能相互覆盖)
3.可否将三条命令综合成一条命令(所谓聚焦函数不能嵌套是否指的这种情况?)



[ 本帖最后由 zengjun81357 于 2011-4-24 18:05 编辑 ]
搜索更多相关主题的帖子: 大学专科 where 姓名 统计 
2011-04-24 15:35
zengjun81357
Rank: 2
等 级:论坛游民
帖 子:73
专家分:20
注 册:2011-3-27
得分:0 
回复 楼主 zengjun81357
已经解决,本论坛有答案
2011-04-24 21:35
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
以下是引用zengjun81357在2011-4-24 21:35:21的发言:

已经解决,本论坛有答案
请告诉我答案在哪儿?谢谢。
2011-04-25 07:06
jyw
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-3-9
得分:0 
SELECT 所在部门,学历,COUNT(*) as 计数 FROM 人员表 where 学历='本科' GROUP by 所在部门,学历 all
这样可否?
2011-04-25 11:35
cymjx
Rank: 2
等 级:论坛游民
帖 子:74
专家分:29
注 册:2010-11-9
得分:0 
SELECT 部门,Count(*) as 人数,sum(iif(学历='本科',1,0)) as 本科学历,sum(iif(学历='专科',1,0)) as 专科学历,sum(iif(学历='高中',1,0)) as 高中学历,FROM 人员表 GROUP BY 单位 into dbf 学历
2011-04-25 15:46
zengjun81357
Rank: 2
等 级:论坛游民
帖 子:73
专家分:20
注 册:2011-3-27
得分:0 
回复 5楼 cymjx
我也是搜索出老板主的回复这样解决的.精巧之处在于用sum(iif),因为是统计个数,习惯于count,思维从count过渡到sum就难
2011-04-25 20:01
ilikeflash
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:148
专家分:186
注 册:2011-4-6
得分:0 
学习
2011-04-27 21:50
go2011
Rank: 6Rank: 6
等 级:侠之大者
帖 子:56
专家分:445
注 册:2011-4-21
得分:0 
1.要将三条命令综合成一条命令可使用如下命令:
SELECT 部门,学历,COUNT(姓名) 人数 FROM 人员表 GROUP BY 部门,学历 ORDER BY 部门

以上命令执行结果如图1所示:


2.要将统计为0的部门也显示出来,要先建一部门表(因为对人员表中没有的部门系统无法自知),然后使用如下命令:
SELECT bm 部门,学历,COUNT(姓名) 人数 FROM bm left outer JOIN 人员表 ON bm=部门 GROUP BY bm,学历 ORDER BY bm

以上命令中假设部门表为bm.dbf,部门字段名是bm,执行结果如图2所示:


3.要将统计为0的学历也显示出来,同样要先建一学历表(假设为xl.dbf,学历字段名为xl),然后使用如下命令:
SELECT bm 部门, xl 学历,COUNT(姓名) 人数 FROM (select bm,xl FROM bm,xl) as a left outer JOIN 人员表 ON bm=部门 AND xl=学历 GROUP BY bm,xl ORDER BY bm

以上命令执行结果如图3所示:


4.要将查询结果输出到统计结果表(统计结果不能相互覆盖),在上述查询命令前加上INSERT INTO 就行了.例如:
INSERT INTO 结果表 SELECT bm 部门, xl 学历,COUNT(姓名) 人数 FROM (select bm,xl FROM bm,xl) as a left outer JOIN 人员表 ON bm=部门 AND xl=学历 GROUP BY bm,xl


[ 本帖最后由 go2011 于 2011-5-9 09:42 编辑 ]
2011-04-30 18:08
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:40
帖 子:749
专家分:2475
注 册:2011-5-8
得分:0 
4楼为正解。

dBase有人接盘了。
2011-05-08 17:03
自强不西
Rank: 2
等 级:论坛游民
帖 子:125
专家分:22
注 册:2019-3-29
得分:0 
高手啊。
2019-05-07 07:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-337763-1-1.html




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

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