13. november 2006 - 14:40
Der 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.
13. november 2006 - 19:56
#1
Well, det kommer an på...
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
14. november 2006 - 18:29
#4
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.