13. november 2006 - 14:40Der er
3 kommentarer og 1 løsning
gennemsnit af hvert x recorde
Hej
Nogle der har et eks på hvordan man tager tager x recorde i databasen og tager gennemsnittet af de x poster og outputtet det, og de gennemsnittet af næste x poster osv.
Hvis du har en ubrudt række tal i din tabel (f.eks. et autonummereret ID), kunne du f.eks. gøre det sådan:
SELECT FLOOR((id - 1) / x) * x + 1 AS fra, FLOOR((id - 1) / x) * x + x AS til, AVG(ditGennemsnitsfelt) AS gennemsnit FROM dinTabel GROUP BY FLOOR((id - 1) / x) * x + 1, FLOOR((id - 1) / x) * x + x
Ellers kan du naturligvis også bruge UNION ALL (dog kun ved et begrænset antal rækker):
SELECT fra, til, AVG(ditGennemsnitsfelt) AS gennemsnit FROM ( SELECT CAST(1 AS INT) AS fra, CAST(10 AS INT) AS til, ditGennemsnitsfelt FROM dinTabel LIMIT 0, 10) GROUP BY fra, til
UNION
SELECT fra, til, AVG(ditGennemsnitsfelt) FROM ( SELECT CAST(11 AS INT) AS fra, CAST(20 AS INT) AS til, ditGennemsnitsfelt FROM dinTabel LIMIT 10, 10) GROUP BY fra, til
UNION
SELECT fra, til, AVG(ditGennemsnitsfelt) FROM ( SELECT CAST(21 AS INT) AS fra, CAST(30 AS INT) AS til, ditGennemsnitsfelt FROM dinTabel LIMIT 20, 10) GROUP BY fra, til
Som du kan se er det dog en temmelig statisk metode. Hvis du skal gøre det mere dynamisk er du nødt til at gøre det i et egentligt programmeringssprog. Her slår SQL ikke til:
Find ud af hvor mange rækker der er i tabellen hhv. hvor mange opsummeringer:
SELECT CEILING(COUNT(*) / x) AS AntalGrupperinger
Loop gennem rækkerne i grupper og beregn gennemsnit (pseudokode):
For idx = 1 to AntalGrupperinger SELECT (idx - 1) * x + 1 AS fra, (idx - 1) * x + x AS til, AVG(ditGennemsnitsfelt) AS Gennemsnit FROM dinTabel LIMIT (idx - 1) * x, x Write fra, til, gennemsnit End For
Det er selvfølgelig også en mulighed. :-) Men nu er spørgsmålet jo placeret under MySQL database og ikke under PHP, så jeg formodede, at du ville have mest muligt lavet i databaselaget.
Synes godt om
Ny brugerNybegynder
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.