Haszprus

Hallgatói megoldások :) - Oracle

©   Haszprus   |   fejlesztés howto labvez sql

A feladat: Válasszuk ki három attribútum közül a legkisebbet.


A hivatalos megoldás:

select least(ero1, ero2, ero3) from tabla

Hallgatói megoldás (New professional szint):

SELECT lancnev
CASE 
WHEN (ero1<ero2) AND (ero1<ero3) THEN
   Ero1
WHEN (ero2<ero1) AND (ero2<ero3) THEN
   Ero2
ELSE
   Ero3
   END
FROM tabla

Egy másik brute-force megoldás (Seasoned professional szint):

 SELECT  ERO1 AS ERO 
 FROM    ABCDEF.LANC 
 WHERE   ERO1<ERO2 AND ERO1<ERO3 
UNION
 SELECT  ERO2 AS ERO 
 FROM    ABCDEF.LANC 
 WHERE   ERO2<ERO1 AND ERO2<ERO3
UNION
 SELECT  ERO3 AS ERO 
 FROM    ABCDEF.LANC 
 WHERE   ERO3<ERO1 AND ERO3<ERO2

(Ez mellesleg nem is azt csinálja amit kéne de azért roppant kreatív )

Harmadik megoldás, ez überel mindent (Master programmer szint)

DECLARE
CURSOR kurzor is
SELECT ero1, ero2, ero3 FROM erotabla
Akt_ero1 NUMBER(4);
Akt_ero2 NUMBER(4);
Akt_ero3 NUMBER(4);

BEGIN
OPEN kurzor;
LOOP
FETCH kurzor INTO Akt_ero1, Akt_ero2, Akt_ero3;
EXIT WHEN kurzor%NOTFOUND;

IF Akt_ero1<Akt_ero2 THEN
   IF Akt_ero1<Akt_ero3 THEN
INSERT INTO ideiglenes VALUES (Akt_ero1);
END IF;

ELSE 
IF Akt_ero2<Akt_ero3 THEN
INSERT INTO ideiglenes VALUES (Akt_ero2);
END IF;
ELSE 
INSERT INTO ideiglenes VALUES (Akt_ero3);

END IF;
COMMIT;
END LOOP
CLOSE kurzor;
END;

(Az ötletet és a szintek megnevezését az Evolution of a Programmer gyűjteményből merítettem.)

RSS: hozzászólások ehhez a bejegyzéshez 2 hozzászólás

Szólj hozzá Te is!


Amatőrök!
Select decode(sign(ero1-decode(sign(ero2-ero3),1,ero3,ero2)),1,decode(sign(ero2-ero3),1,ero3,ero2),ero1) from tabla;
Hozzászólásod:


Nem vagy bejelentkezve, de...

A)
hozzászólhatsz regisztrálatlanul...

B)
ha regisztrálva vagy, bejelentkezhetsz...