统计问题求解

[复制链接]
查看11 | 回复9 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
统计问题求解
--学生信息表
create table STUDENTINFO
(
STU_NUM VARCHAR2(20) not null, --学生学号
STU_NAME VARCHAR2(50), --姓名
PASSWORD VARCHAR2(50), --密码
STU_PINYIN VARCHAR2(50), --姓名拼音
STU_ID VARCHAR2(25), --身份证号
STU_SEX VARCHAR2(5), --性别
STU_CONTACT VARCHAR2(100), --联系地址
STU_HOME VARCHAR2(100), --家庭地址
STU_HOMEPHONE VARCHAR2(50), --家庭电话
STU_FACULTYNO VARCHAR2(6), --学院编码,来自orgnizationinfo表
STU_LE_SYS VARCHAR2(2), --学制
STU_DEPTNO VARCHAR2(5), --系编码,来自departmentinfo表
STU_CLASS VARCHAR2(50), --班级
STU_ORIGIN VARCHAR2(40), --生源
STU_FROM VARCHAR2(50), --籍贯
STU_ET_DAY VARCHAR2(50), --入学日期
STU_TYPECODE VARCHAR2(2), --类别编码,0-本科生,1--研究生,2--成教生
STU_MAJORNAME VARCHAR2(50), --专业名称
STU_EMAIL VARCHAR2(50), --电子邮件
STU_BIRTH VARCHAR2(50), --出生日期
STU_FOLK VARCHAR2(50), --民族
STU_NATIVE VARCHAR2(50), --??(考虑是否删除,我也不记得了)
STU_POLITICS VARCHAR2(50), --政治面貌
STU_MARRIAGE VARCHAR2(50), --婚姻状况
STU_DORMITORYADDR VARCHAR2(50), --宿舍地址
STU_DORMITORYPHONE VARCHAR2(50), --宿舍电话
STU_MOBILE VARCHAR2(50), --移动电话
STU_IMAGELINK VARCHAR2(50), --照片连接
STU_FINGER VARCHAR2(50) --指纹信息
)
tablespace USERS
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 640K
next 128K
minextents 1
maxextents unlimited
pctincrease 0
);

create table ORGANIZATIONINFO
(
ORGANIZATIONCODE NUMBER(4) not null, --学院编码
ORGANIZATIONNAME VARCHAR2(50), --学院名称
LEADERNAME VARCHAR2(50), --负责人姓名
LEADERCODE VARCHAR2(50), --负责人
LEADERPHONE VARCHAR2(50), --负责人电话
OFFICEPHONE VARCHAR2(50) --办公电话
)
tablespace USERS
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 128K
next 128K
minextents 1
maxextents unlimited
pctincrease 0
);
求每个学院每个学年的新生入学人数;
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
从表单上反映应该形成这样的统计表
学院2000年 2001年 2002年 2003年 (入学时间)
—————————————————————————————
经济学院10 15
20 18
信息学院 15 20
23 25
管理学院 21
41 81 100
计算机学院5
15 52
88

感觉上好象没发用一条sql计算出来,如果是用procedure不知道该怎么写。搞了几天没什么方向了!请指点下方向。
谢谢


回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
Corespeed Buddy,
STU_FACULTYNO VARCHAR2(6), --学院编码,来自orgnizationinfo表

STU_DEPTNO VARCHAR2(5), --系编码,来自departmentinfo表
What do you mean by "来自orgnizationinfo表"? How 来自?
Once you identify the relationship between two table, you might just
COUNT(STU_NUM), 入学时间,学院by using GROUP BY 学院 and 入学时间。
Good Luck.

-app
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
参考一下这个吧:
http://www.itpub.net/showthread.php?s=&threadid=96853
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
selectb.ORGANIZATIONNAME ,
sum(decode(substr(STU_ET_DAY ,1,4),'2000',1,0))"2000年",
sum(decode(substr(STU_ET_DAY ,1,4),'2001',1,0))"2001年",
sum(decode(substr(STU_ET_DAY ,1,4),'2002',1,0))"2002年",
sum(decode(substr(STU_ET_DAY ,1,4),'2003',1,0))"2003年(入学时间)",
from STUDENTINFOa, ORGANIZATIONINFOb
where a.STU_FACULTYNO= b.ORGANIZATIONCODE
group byb.ORGANIZATIONNAME
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
呵呵,biti的方法到明年就又要改代码了。


回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
2000 ----2003 完全可以用变量传入代替
如果你非要写在sql中也简单
'2003':trunc(sysdate,'yyyy')
2002, trunc(sysdate,'yyyy')- 1
2001 ,trunc(sysdate,'yyyy')- 2
2000 , trunc(sysdate,'yyyy')- 3

如果考虑到留级的情况,学生最多可以在学校呆6年
不知道事实上你是怎么处理的
我没有这么写,只是因为这不应该是我关心的范畴
当然还有一个问题,就是假如是在上半年查询,则这个还需要处理,跟9月份以后查询又不一样了,在sql里面处理起来复杂一些
所以我认为应该在前台程序里面判断处理好了,然后用变量传入sql
或者动态生成这个SQL
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
出发点不一样,关心的范畴当然也不一样。都没错。


如果我只是统计在校的这几年,当然可以这样。
如果我要统计从建校以来,所有年份的每年入学人数,这个SQL恐怕这样写就不是太好了。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层



1:你的这个需求,他是不需要的,因为我大致了解一些 楼主的情况
2:你给出的连接,也无法满足这样的需求
3:只有pl/sql才是行列转置的万能解
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
我看了一下,我给的连接不能满足需求,只是提供一个思路而已。
最终的意思,我也是用PL/SQL进行行列转置。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行