Avatar billede vels Nybegynder
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.
Avatar billede kjulius Novice
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
Avatar billede vels Nybegynder
13. november 2006 - 23:25 #2
Det nememste må vel være at bare lave en alm. select og så lade php lave det her regne operationer?
Avatar billede vels Nybegynder
13. november 2006 - 23:25 #3
men smider du ikke et svar?
Avatar billede kjulius Novice
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.
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
Computerworld tilbyder specialiserede kurser i database-management

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