Avatar billede eazye Nybegynder
11. august 2010 - 15:49 Der 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.

Håber det giver mening, ellers skriver I bare.

På forhånd mange tak
Lasse
11. august 2010 - 16:52 #1
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

og det giver mig resultatet:
 
hold_id  holdAntal 
1 9.8000
6 5.5000
5 3.2500

Var det saadan noget du var ude efter?
Avatar billede eazye Nybegynder
11. august 2010 - 17:58 #2
præcis sådan der.

tak skal du have
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

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