Thursday, July 28, 2005

SQL n.ik max érték

Soci-nál olvasva láttam ezt a linket
. Ahol a következő problémáról esik szó: n-ik maximum lekérése. Néhány olyan érdekes megoldást láttam, amire bizony nem gondoltam.


Csináljuk meg a number táblát, a következő értékekkel:


Create table number (num integer)
Insert into number values(3456)
Insert into number values(846)
Insert into number values(1456)
Insert into number values(3098)
Insert into number values(34)
Insert into number values(67856)
Insert into number values(906)
Insert into number values(34656)
Insert into number values(9056)
Insert into number values(3036)


1. megoldás joinnal:
select t1.num from number t1 inner join number t2 on t1.num<=t2.num group by t1.num having count(t1.num)=5
itt azt használja ki, hogy mindegyik rekordhoz annyi rekordot tud joinolni, amennyi nagyobb van nálla. A legnagyobbhoz csak eggyet, a másodikhoz kettőt. Utánna már csak össze kell számolni. Briliáns!


2. megoldás top:
Select top 1 num from(Select top 5 num from number order by num desc) T order by num asc Az első n-rekord csökkenő sorrendben, majd ezekből az első növekvő sorrendben.


4. megoldás: select num from ( Select (select count(*) from number where num>=T.num)as Sno ,num from number T ) temp where Sno=5 Ez az első megoldáshoz közeli..a számokhoz hozzá kapcsoljuk, hogy hány >= van tőlűk, majd ezt az "új azonosítót - Sno" hasznájuk ki.


5. megoldás:
Select min(num) from (select top 5 num from number order by num desc) T. Ami

0 Comments:

Post a Comment

<< Home