首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

求一简单的sql语句,该如何解决

2012-02-14 
求一简单的sql语句如表A学科,报名时间,人员姓名数学1月人员a数学2月人员b语文3月人员c数学1月人员d数学1月

求一简单的sql语句
如表A
学科,报名时间,人员姓名
数学   1月   人员a
数学   2月   人员b
语文   3月   人员c
数学   1月   人员d
数学   1月   人员e
语文   3月   人员f
数学   2月   人员g
英语....
化学....
.......

求按照   学科和报名时间排序,
如果学科和报名时间都一样的数据超过3条就显示出相关字段

学科

1   数学   1月   人员a
2   数学   1月   人员d
3   数学   1月   人员e

我只会用
select   row_number()   over(partition   by   学科,报名时间   ordre   by   报名时间)   rn
,人员姓名,学科,报名时间
from   a

但是不会如何把不要的记录不显示。我是想
学科和报名时间都一样的数据超过3条就显示


[解决办法]
用Group by having不行吗?呵呵,刚学Oracle不久.试试这个行不行

create table testa(学科 varchar2(10),报名时间 varchar2(10),人员姓名 varchar2(10))

select testa.学科,testa.报名时间,testa.人员姓名 from testa
join (select 学科,报名时间 from testa group by 学科,报名时间 having count(*) > = 3) temp
on testa.学科 = temp.学科 and testa.报名时间 = temp.报名时间
[解决办法]
select * from A t
where (select count(0) from A v where v.subject=t.subject and v.date=t.date)> =3
或者樓主的方法
select * from A
where (subject,date) in
(select 学科,报名时间 from
(
select row_number() over(partition by 学科,报名时间 ordre by 报名时间) rn
,人员姓名,学科,报名时间
from a where rn> =3
)
)

热点排行