一个简单的sql问题,但是,,

[复制链接]
查看11 | 回复9 | 2008-11-14 14:42:19 | 显示全部楼层 |阅读模式
但是好像现在做不出来。。。。
t1 namef1f2
a 18
b 27
c 36
d 45
e 54
f
63
g 72
h 81
如何用一个sql语句查询处以下的结果?
name f1name f2
h 8 a8
g 7 b7
f
6 c6
e 5 d5
回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
select max(name1) name1,ff f1,max(name2) name2,ff f2
from (
select decode(greatest(f1,f2),f1,name) name1,
decode(least(f1,f2),f1,name) name2,
greatest(f1,f2) ff
from t
)
group by ff
order by ff desc
回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
左边两列:按照其中一个列的值排序
右边两列:按找另外一个列的值排序
那个数据当然是不会那么规则的。。。。
最初由 nyfor 发布
[B]select max(name1) name1,ff f1,max(name2) name2,ff f2
from (
select decode(greatest(f1,f2),f1,name) name1,
decode(least(f1,f2),f1,name) name2,
greatest(f1,f2) ff
from t
)
group by ff
order by ff desc [/B]

回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
名字也是部规则的,不能够拿来排序得
最初由 nyfor 发布
[B]select max(name1) name1,ff f1,max(name2) name2,ff f2
from (
select decode(greatest(f1,f2),f1,name) name1,
decode(least(f1,f2),f1,name) name2,
greatest(f1,f2) ff
from t
)
group by ff
order by ff desc [/B]

回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
不明白楼主的意思
回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
name是学生的名字,f1,f2分别是学生的2门成绩,希望可以用一个语句选出每门功课的前5名
回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
select a.name, a.f1, b.name, b.f2
from (select t1.name, t1.f1 from t1 order by t2) a, (select t1.name, t1.f2 from t1 order by t1) b
where a.rowid = b.rowid

没有做过测试,因为现在没有环境。
回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
select a.name,a.f1,b.name,b.f2
from (select name,f1,rownum r1 from(select name,f1 from test order by f1 desc)) a,
(select name,f2,rownum r2 from(select name,f2 from test order by f2 desc)) b
where a.r1=b.r2 and rownum<5
虽然有点烦,但是应该可以满足你的要求。最后的rownum确定你想得到的纪录数。(已测试)
回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
昨天看得头晕,好多细节没想到。还是cyuboy周到!这么晚了还在奋斗!!:)
回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
最初由 PondKa 发布
[B]这么晚了还在奋斗!!:) [/B]

上海是个不夜城,呵呵


回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行