11. august 2010 - 15:49Der er
1 kommentar og 1 løsning
Top 3 Query på et Pointsystem
Hej eksperter, jeg sidder med et eksisterende point-system som jeg skal have lavet et udtræk fra som viser de 3 hold med flest point pr deltager.
databasen er (meget groft) som følger:
Hold har et antal medlemmer, og et unikt id. tabellen er således: tblHold: antal_medlemmer, id
Point tildeles til hold i forskellige kvantiteter (varierende "antal" point pr tildeling). tabellen er således: tblPoint: antal, hold_id
For at udtrække de 3 hold, med højest pointantal anvendes følgende query: "SELECT sum(antal) AS holdAntal FROM tblPoint GROUP BY hold_id ORDER BY holdAntal DESC LIMIT 3"
Det jeg godt kunne tænke mig, er en query som kan tage højde for hvor mange medlemmer et hold har, og således returnere de 3 hold med flest point pr deltagere.
Jeg antager at id i tblHold svarer til hold_id i tblpoint og at i tblPoint vil der kunne vaere adskillige raekker for hver hold_id. (I saa fald vil jeg foreslaa i tblPoint at indsaette endnu et felt der er id for hver raekke i tblPoint. Saa er det mindre forvirrende hvis et hold for samme antal points for to forskellige discipliner.)
Jeg lavede for test disse to tabeller: CREATE TABLE eazye_hold(id INT, antal_medlemmer INT); CREATE TABLE eazye_point(id INT, antal INT, hold_id INT); og i de tabeller indsatte jeg disse vaerdier: INSERT INTO eazye_hold VALUES(1, 5); INSERT INTO eazye_hold VALUES(2, 7); INSERT INTO eazye_hold VALUES(3, 12); INSERT INTO eazye_hold VALUES(4, 3); INSERT INTO eazye_hold VALUES(5, 16); INSERT INTO eazye_hold VALUES(6, 4);
INSERT INTO eazye_point VALUES(1, 12, 1); INSERT INTO eazye_point VALUES(2, 5, 1); INSERT INTO eazye_point VALUES(3, 7, 1); INSERT INTO eazye_point VALUES(4, 25, 1); INSERT INTO eazye_point VALUES(5, 16, 2); INSERT INTO eazye_point VALUES(6, 3, 3); INSERT INTO eazye_point VALUES(7, 1, 3); INSERT INTO eazye_point VALUES(8, 27, 5); INSERT INTO eazye_point VALUES(9, 0, 5); INSERT INTO eazye_point VALUES(10, 15, 5); INSERT INTO eazye_point VALUES(11, 2, 5); INSERT INTO eazye_point VALUES(12, 8, 5); INSERT INTO eazye_point VALUES(13, 12, 6); INSERT INTO eazye_point VALUES(14, 7, 6); INSERT INTO eazye_point VALUES(15, 3, 6);
Saa bruger jeg denne query: SELECT hold_id, SUM(antal/antal_medlemmer) AS holdAntal FROM eazye_hold h INNER JOIN eazye_point p ON h.id = p.hold_id GROUP BY hold_id ORDER BY holdAntal DESC LIMIT 3
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.