Avatar billede zaknafein Praktikant
01. maj 2006 - 12:50 Der er 7 kommentarer og
2 løsninger

Minimum af 2 værdier

Nogen der ved om jeg i SQL kan tage et minimum af 2 værdier, hvoraf den ene kommer fra en tabel, og den anden værdi kommer som parameter til DB'en?

Jeg vil gerne kunne fodre MIN aggregat funktionen, med en liste af værdier, som ikke kommer fra en select statement!
Avatar billede pgroen Nybegynder
01. maj 2006 - 13:18 #1
Mener du noget i stil med:

SELECT least(2,3) FROM DUAL;

?
Avatar billede zaknafein Praktikant
01. maj 2006 - 13:33 #2
noget i stil med:
SELECT SUM(etellerandet) FROM tabel1 WHERE( (MIN(værdi1, værdi2)) / (MAX(værdi1, værdi2)) > 10 )
Dvs jeg skal tage den mindste af 2 værdier og dividere med den største, og det resultat skal med i min SUM fra den ydre SQL.

problemet er at værdi1 kommer fra tabellen mens værdi 2 er en værdi fra min app.
Dvs den er indkodet i SQL strengen dynamisk.
Avatar billede zaknafein Praktikant
01. maj 2006 - 13:34 #3
Jeg tror jeg enten er nødt til at gemme den ene række værdier i en midligertidig tabel, eller også hente det hele ud og lave udregninger ne i min APP.
Avatar billede pgroen Nybegynder
01. maj 2006 - 14:49 #4
Nu skriver du ikke noget hvad det er for en 'APP' du har, men i Oracle ville
en PL/SQL-'applikation' se ud som:

CREATE OR REPLACE FUNCTION xxx (pParameter NUMBER) RETURN NUMBER IS
  vResult  NUMBER;
BEGIN
  SELECT SUM ((LEAST (comm, pParameter)) / (GREATEST (comm, pParameter)))
    INTO vResult
    FROM emp
    WHERE ((LEAST (sal, pParameter)) / (GREATEST (sal, pParameter))  <1);
  RETURN vResult;
END;
/
Avatar billede arne_v Ekspert
02. maj 2006 - 01:12 #5
WHERE MIN(felt1,X) / MAX(felt2,Y) > 10

må kunne omskrives til

WHERE (X/felt2 > 10 AND felt1 >= X AND felt2 >= Y) OR
      (X/Y > 10 AND felt1 >= X AND felt2 < Y) OR
      (felt1/felt2 > 10 AND felt1 < X AND felt2 >= Y) OR
      (felt1/Y AND felt1 < X AND felt2 < Y)
Avatar billede arne_v Ekspert
19. juni 2006 - 01:15 #6
zaknafein ?
Avatar billede zaknafein Praktikant
19. juni 2006 - 11:01 #7
Ah jeg glemte denne tråd. Jeg løste problemet ved at lade programmet håndtere dataen.
Der kom yderligere komplikatione til, således at jeg ikke tror det er muligt at lave det hele i en sql alligevel.

Derud over skulle vi kunne skifte den funktionalitet der var tale om her.
Og det var nemmere at udskifte en funktion i koden end sql'en.

Men det ser uddmielbart snedigt nok ud med at dele den op i 4 OR's med kriterierne.

Jeg synes i skal dele de points, da jeg ikke kommer til at bruge det og i har brugt energi på det.
Avatar billede pgroen Nybegynder
19. juni 2006 - 12:23 #8
Et svar - selv om Arnes løsning da vist er den mest logiske... :-)
Avatar billede arne_v Ekspert
19. juni 2006 - 12:33 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester