Avatar billede rane Nybegynder
11. marts 2004 - 17:37 Der er 3 kommentarer og
1 løsning

SQL Gruppering

Hejsa,

jeg skal have lavet en lidt speciel gruppering (som skal sorteres efter højeste points), som vedrører 4 forskellige beregninger fra data i 1 tabel. Tabellen indeholder f.eks:
-----
SpillerID | SpillerNavn | Position | Mål | Skud | Taklinger | Afleveringer | Erobringer | Redninger |

99922 | Palle Pallesen | Midtbane | 2 | 7 | 21 | 31 | 12 | 14 |
osv.
-----

Position kan være:  Målmand, Forsvarer, Midtbane og Angriber

MEN..beregningerne skifter alt efter hvilken position der er tale om. Eksempelvis er beregningen for en forsvarer:

Taklinger * 0,10 + Afleveringer * 0,05 + Erobringer * 0,06 + Skud * 0,12 + Mål * 0,25

Hvis der er tale om en midtbanespiller er ovenstående tal anderledes, dvs. jeg sikkert skal bruge 4 SQL-sætninger indeni hinanden. Før havde jeg nedenstående SQL som bare udregnede Målmand-points:

SELECT Top 32 PlayerID, HoldID, SUM(udregning herinde) as maalmandpts FROM playerstats WHERE Playerposition = 'Maalmand'  AND RundeNr < 3 GROUP BY PlayerID, HoldID ORDER BY SUM(udregning herinde) DESC

Nogen der kan guide mig hen i at få lavet en (sikkert meget stor) SQL-sætning der tager højde for de 4 positioner og får lavet 4 forskellige beregninger ud fra det? Og samtidig sorterer det efter scoren?
Avatar billede torben_brandt Nybegynder
12. marts 2004 - 01:01 #1
Lav en anden tabel (kaldet Spillertyper):
Position | TaklingScore | AfleveringScore | ErobringScore | SkudScore | MålScore
Målmand | 0.1 | 0.05 |´0.06 | 0.12 | 0.25
...

Hvor Position svarer til Position i din nuværende tabel (kaldet Spillere), og de andre angiver de tal du nævner (0,10, 0,05, 0,06, 0,12, 0,25, osv) for den pågældende position på banen.

Så laver du udtrækket som:
SELECT
s.PlayerId, s.HoldId, andreFelter,
SUM(
  s.Taklinger * t.TaklingScore +
  ...
  s.Mål * t.MålScore
) AS Points
FROM
Spillere s
LEFT JOIN
SpillerTyper t
ON
s.Position = t.Position
GROUP BY
s.PlayerId, s.HoldId
ORDER BY
SUM(
  ...
) DESC

Så er det også nemt at tilrette vægtene, da de bare skal rettes i tabellen SpillerTyper.

/Torben
Avatar billede rane Nybegynder
17. marts 2004 - 23:44 #2
Takker :)  Hvis du liige fikser et svar...;)
Avatar billede torben_brandt Nybegynder
18. marts 2004 - 00:59 #3
Jeg er ligeglad med point'ene...

:) Torben
Avatar billede rane Nybegynder
18. marts 2004 - 14:44 #4
Synes efterhånden der er en del af dem - respekt :)
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
Kurser inden for grundlæggende programmering

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