Avatar billede 7th Praktikant
01. juni 2004 - 23:05 Der er 6 kommentarer og
1 løsning

Udregn gennemsnit i SQL

Jeg skal have noget hjælp til at udregne et gennemsnit i SQL til en afstemning. Jeg har kigget på AVG() og SUM, men det gik ikke så godt.

Min tabel er opbygget således. For hver afstemningsmulighed er der følgende felter: id, option, votes.

Nu er matematik ikke min stærkeste side, men jeg er kommet frem til, at skal have fundet tre variable tal: antal af afstemningsmuligheder, antal stemmer totalt, og antal stemmer for den enkelte afstemningsmulighed. Det i sig selv er ikke noget problem, men hvordan får jeg regnet det ud på en enkelt SQL linie, hvis det er muligt?

Jeg har kigget flere spørgsmål igennem, og de fleste indeholdt mysql_query ("SELECT AVG(votes) as snit FROM tabel GROUP by id"). Når jeg prøver det, får jeg blot udskrevet antallet af stemmer for den enkelte afstemningsmulighed.
Avatar billede jakoba Nybegynder
01. juni 2004 - 23:14 #1
SQL funktioner som AVV og MAX osv dorudsætter at din GROUP BY samler alle de rækker der skal averages til een gruppe.  Når du siger GROUP BY id  får du gennemsnittet for hvert enkelt id (og gennemsnittet for een eneste række er anturligvis den rækkes værdi.

prøv med
  GROUP BY option
så får du gennemsnittet for alle dem der har stemt på hver option.

PS: men jeg har mistanke om at det vist heller ikke er det du har brug for. Kan de passe at hcer 'id' kun kan steemme een gang og kun kan stemme på een 'option'. Hvis det er et korrekt gæt skal du nok snarere bruge funktionen COUNT

    SELECT COUNT(votes) as antal, option
    FROM  talel
    GROUP BY option

mvh JakobA
Avatar billede 7th Praktikant
01. juni 2004 - 23:18 #2
Din første antagelse er korrekt. Feltet votes opdateres bare for hver stemme.
Avatar billede 7th Praktikant
02. juni 2004 - 00:08 #3
Hvad skal rettes for at følgende giver det rigtige resultat?

"SELECT votes / SUM(votes) * 100 as gennemsnit FROM tabel WHERE id = ".$row['id']." GROUP BY 'option'"

I øjeblikket får udskrevet 1.00.
Avatar billede 7th Praktikant
02. juni 2004 - 00:09 #4
Hov...
"SELECT * , votes / SUM(votes) * 100 as gennemsnit FROM tabel WHERE id = ".$row['id']." GROUP BY 'option'"
Avatar billede 7th Praktikant
02. juni 2004 - 01:39 #5
Min løsning jeg fandt frem til opfylder ikke helt min ønskede løsning, men det går nok.

while (...) {
$antal = mysql_result (mysql_query ("SELECT SUM(votes) FROM tabel GROUP BY 'option'") , 0);
echo round ($row['votes'] / $antal * 100);
}
Avatar billede 7th Praktikant
02. juni 2004 - 01:51 #6
jakoba, havde lige glemt dig. Skriv lige hvis du mangler nogle points, og tak for hjælpen :)
Avatar billede 7th Praktikant
02. juni 2004 - 07:39 #7
$res = mysql_query ("SELECT * FROM tabel ORDER BY uin") or die (mysql_error());

while ($row = mysql_fetch_array ($res)) {
$procent = $row['votes'] > 0 ? round ($row['votes'] / mysql_result (mysql_query ("SELECT SUM(votes) FROM tabel") , 0) * 100) : 0;
$options[] = $row['option']." | votes ".$row['votes']." | procent ".$procent."%";
}

echo implode ("<br>" , $options);
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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