webForumDet fria alternativet

Dynamisk alias. If?

4 svar · 259 visningar · startad av Kristianstad

KristianstadMedlem sedan dec. 2002841 inlägg
#1

Hejsan!

|ID|FilmID|Poang|Anvandare|
Jag kör MySQL 4.0.18

Jag vill ha en SQL-fråga där "aliasena" är dynamiska.

Min "grund-sql-fråga" ser ut så här:
SELECT FilmID,
Poang * ett_dynamiskt_varde AS varde
FROM Tabell
WHERE (Poang=4 OR Poang=5) AND (Anvandare='Kalle' OR Anvandare='Jakob' OR Anvandare='Peter' OR Anvandare='Pelle')

OBS! Det finns flera poster som har samma FilmID

Nu är det så att jag vill att ett_dynamiskt varde ska vara olika beroende på vad Anvandare innehåller. T.ex. om Anvandare='Peter' så ska ett värde multipliceras och om Anvandare='Kalle' så ska ett annat värde multipliceras.

Alltså något likt
(IF Anvandare='Kalle' THEN Poang * 0.345 AS varde), (IF Anvandare='Peter' THEN Poang * 2.55 AS varde)

Och om det går skulle jag gärna vilja att hela alltet grupperas så att det i slutändan bara finns en post per FilmID kvar och sorterat efter varde DESC.

Tack på förhand!

LarsGMedlem sedan dec. 200012 464 inlägg
#2
select filmid, 
poang * case anvandare 
   when 'LarsG' then 4711
   when '@nders' then 42 end
FROM Tabell
WHERE Poang in(4,5) 
AND Anvandare in ('LarsG','@nders')

När du säger att du vill ha en post per filmid hur vill du då behandla poang? Summering, genomsnitt, standardavvikelse eller vad?

KristianstadMedlem sedan dec. 2002841 inlägg
#3

Hej igen Lars!

Poang ska behandlas som summering!

/red Poang multipliceras i din fråga med talet?

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Ja.

select filmid, 
sum(poang * case anvandare 
   when 'LarsG' then 4711
   when '@nders' then 42 end) as score
FROM Tabell
WHERE Poang in(4,5) 
AND Anvandare in ('LarsG','@nders')
group by filmid
order by score desc
KristianstadMedlem sedan dec. 2002841 inlägg
#5

Tackar och bockar!

138 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)