Avatar billede weblance Nybegynder
13. marts 2008 - 19:48 Der er 20 kommentarer og
1 løsning

Udregne gennemsnit af data fra MySQL

Jeg er ved at lave et script til sammentælling af arbejdstimer, og kunne i den forbindelse godt tænke mig at lave en funktion hvor jeg kan udregne et gennemsnit for en given periode.

Nogen der ved hvordan?
Avatar billede nielle Nybegynder
13. marts 2008 - 19:51 #1
Noget i denne stil?

SELECT avg(arbejdstimer) AS gennemsnit FROM dinTabel WHERE tidsbunkt BETWEEN starttidspunkt AND sluttidspunkt
Avatar billede weblance Nybegynder
13. marts 2008 - 19:59 #2
skal jeg så lave en echo gennemsnit for at vise resultatet?
Avatar billede nielle Nybegynder
13. marts 2008 - 20:01 #3
Ja ... godt nok pakket ind i noget passende mysql-kode :)
Avatar billede weblance Nybegynder
13. marts 2008 - 20:22 #4
Perfekt - lige i øjet. Send et svar så får du point :)
Avatar billede nielle Nybegynder
13. marts 2008 - 20:24 #5
Svar :^)
Avatar billede weblance Nybegynder
13. marts 2008 - 20:30 #6
Tak!

Lige et ekstra spørgsmål: kan man have flere variabler hvor der står "BETWEEN starttidspunkt AND sluttidspunkt", som fx. "BETWEEN startmåned og startår AND slutmåned og slutår"
Avatar billede nielle Nybegynder
14. marts 2008 - 20:43 #7
Ikke helt forstået? "startmåned" og "startår" er jo allerede kombineret i "starttidspunkt".
Avatar billede weblance Nybegynder
14. marts 2008 - 21:53 #8
Nja . . . egentlig ikke. Jeg har måned og år adskilt i forskellige rækker.
Avatar billede weblance Nybegynder
14. marts 2008 - 21:54 #9
Men det er måske bare mig der ikke er så god til SQL endnu, har en række med dag, en med maaned og en med aar.
Avatar billede nielle Nybegynder
14. marts 2008 - 22:47 #10
I en database er det uligt at oprette dato eller dato+tid felter. Her har man hele datoen samlet i et felt. Dette giver nogle klare fordele i forhold til at splitte op over tre felter.
Avatar billede weblance Nybegynder
14. marts 2008 - 23:02 #11
Ja, men hvordan kan jeg så udtrække data ved at sige at måned og år skal passe sammen? Det er egentlig derfor jeg har valgt at dele datoerne op i tre felter.
Avatar billede nielle Nybegynder
15. marts 2008 - 08:26 #12
MySQL - og alle andre databaser for den sags skyld - har nogle funktioner indbygget i sig. Bl.a. funktioner til at arbejde med datoer og tid:

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

Ved at bruge dem, kan man f.eks. udtrække alle de poster som høre til denne måned:

SELECT * FROM dinTabel WHERE year(ditDatifelt) = 2008 AND month(ditDatifelt) = 3
Avatar billede weblance Nybegynder
15. marts 2008 - 18:50 #13
Tusind tak for det!

Jeg tillader mig at presse citronen lidt mere. Når jeg vil vise datoerne vises de som åååå-mm-dd hvordan for jeg den til at vise dd-mm-åååå i stedet?
Avatar billede weblance Nybegynder
15. marts 2008 - 19:53 #14
Kan selv og vil selv ;)

$dato = strtotime($row['dato']);
echo date("d-m-Y", $dato);

SÅDAN!
Avatar billede weblance Nybegynder
15. marts 2008 - 21:21 #15
Nej, den er gal :(

Jeg kan simpelthen ikke hitte greje på det. Forklar mig gerne som om jeg var 1 år.

Jeg skal bruge gennemsnittet af timerne i perioden 01-02-2008 til 31-03-2008. Jeg har datoerne for hver record i et korrekt 'date' felt. Timerne ligger i en række der hedder 'tid'. Altså 'id' 'dato' 'tid'.

Har prøvet med "SELECT AVG(tid) AS gennemsnit FROM mintabel WHERE dato BETWEEN 2008-02-01 AND 2008-03-31", men det virker ikke.
Avatar billede weblance Nybegynder
15. marts 2008 - 21:32 #16
Jeg tror altså at jeg nok burde gå i seng . . . nu vrøvler jeg fuldstændig vildt og tosset.

SELECT AVG(tid) AS gennemsnit FROM mintabel WHERE MONTH(dato) BETWEEN '02' AND '03'

giver mig et gennemsnit af timerne, pr. dag - så langt så godt. Det jeg er ude efter har jeg slet ikke forklaret ordentligt. Jeg ønsker at få udregnet gennemsnittet af fx. summen af februar + summen af marts. Altså hvis februar er 10 timer og marts er 5 timer, vil gennemsnittet af disse to måneder være 7,5. Men jeg kan nok godt se at det kræver en del mere kode end AVG(tid).
Avatar billede weblance Nybegynder
15. marts 2008 - 21:39 #17
Skal være sådan:

SQL:
SELECT SUM(tid) AS gennemsnit FROM mintabel WHERE MONTH(dato) BETWEEN $startmaaned AND $slutmaaned

PHP kode:
$output = $row['gennemsnit'];

if($startmaaned == $slutmaaned){
    $gennemsnit = $output;
    }else{
    $antal_maaneder = $slutmaaned - $startmaaned + 1;
    $gennemsnit = $output / $antal_maaneder;
    }

$gennemsnit løser nu mit problem!
Avatar billede weblance Nybegynder
15. marts 2008 - 21:42 #18
Kan godt se at if sætningen er overflødig.
Avatar billede nielle Nybegynder
16. marts 2008 - 19:44 #19
Det står ikke helt klart for mig ... har du fortsat et problem eller ej?
Avatar billede weblance Nybegynder
16. marts 2008 - 20:32 #20
Nej, ikke flere problemer . . . det er bare mig der vrøvler og ikke tænker mig ordetligt om!
Avatar billede nielle Nybegynder
16. marts 2008 - 20:49 #21
:^)
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