Avatar billede Slettet bruger
30. juni 2006 - 09:24 Der er 5 kommentarer og
1 løsning

Antal personer i en aldersgruppe

Hej!

Jeg har en tabel med et felt med en dato, personens fødselsdato. Mit problem ligger i at jeg skal finde antal personer (dvs. antal poster) som ligger i en bestemt aldersgruppe, eksempelvis 20-25 år.

På nuværende tidspunkt har jeg følgende SQL sætning, som henter antallet af personer med hver alder, altså eksempelvis 22 personer på 30 år:
SELECT YEAR(CURRENT_DATE()) - YEAR(birthdate) - (RIGHT(CURRENT_DATE(),5)<RIGHT(birthdate,5)) AS age, COUNT(id) as antal FROM brugere WHERE dato_end > CURRENT_DATE() AND dato_start < CURRENT_DATE() AND LENGTH(birthdate) > 2 GROUP by age

Ovenstående SQL sætning skal så omskrives til at vise antal personer i eksempelvis 20-25 års alderen... Statistikken kan sagtens udtrækkes med flere queries, altså eksempelvis et query for hver aldersgruppe.

Jeg håber jeg har formuleret mit problem klart nok ;)
Avatar billede arne_v Ekspert
01. juli 2006 - 05:52 #1
CREATE TABLE person (firstname VARCHAR(32), lastname VARCHAR(32), birthday DATETIME, PRIMARY KEY(firstname,lastname));

INSERT INTO person VALUES('Anders', 'Andersen', 19810702);
INSERT INTO person VALUES('Børge', 'Børgesen', 19810629);
INSERT INTO person VALUES('Christian', 'Christiansen', 19790702);

SELECT * FROM person;

SELECT YEAR(NOW())-YEAR(birthday)-IF(DAYOFYEAR(NOW())<DAYOFYEAR(birthday),1,0) AS age FROM person;

SELECT 5*FLOOR(age/5),5*FLOOR(age/5)+4,COUNT(*)
FROM (SELECT YEAR(NOW())-YEAR(birthday)-IF(DAYOFYEAR(NOW())<DAYOFYEAR(birthday),1,0) AS age FROM person) x
GROUP BY 5*FLOOR(age/5);

DROP TABLE person;
Avatar billede arne_v Ekspert
01. juli 2006 - 05:53 #2
mysql> CREATE TABLE person (firstname VARCHAR(32), lastname VARCHAR(32), birthday DATETIME, PRIMARY KEY(firstname,lastname));
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql> INSERT INTO person VALUES('Anders', 'Andersen', 19810702);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO person VALUES('Borge', 'Borgesen', 19810629);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO person VALUES('Christian', 'Christiansen', 19790702);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> SELECT * FROM person;
+-----------+--------------+---------------------+
| firstname | lastname    | birthday            |
+-----------+--------------+---------------------+
| Anders    | Andersen    | 1981-07-02 00:00:00 |
| Borge    | Borgesen    | 1981-06-29 00:00:00 |
| Christian | Christiansen | 1979-07-02 00:00:00 |
+-----------+--------------+---------------------+
3 rows in set (0.00 sec)

mysql>
mysql> SELECT YEAR(NOW())-YEAR(birthday)-IF(DAYOFYEAR(NOW())<DAYOFYEAR(birthday),1,0) AS age FROM person;
+------+
| age  |
+------+
|  24 |
|  25 |
|  26 |
+------+
3 rows in set (0.00 sec)

mysql>
mysql> SELECT 5*FLOOR(age/5),5*FLOOR(age/5)+4,COUNT(*)
    -> FROM (SELECT YEAR(NOW())-YEAR(birthday)-IF(DAYOFYEAR(NOW())<DAYOFYEAR(birthday),1,0) AS age FROM person) x
    -> GROUP BY 5*FLOOR(age/5);
+----------------+------------------+----------+
| 5*FLOOR(age/5) | 5*FLOOR(age/5)+4 | COUNT(*) |
+----------------+------------------+----------+
|            20 |              24 |        1 |
|            25 |              29 |        2 |
+----------------+------------------+----------+
2 rows in set (0.00 sec)

mysql>
mysql> DROP TABLE person;
Query OK, 0 rows affected (0.00 sec)
Avatar billede arne_v Ekspert
01. juli 2006 - 05:53 #3
det må ihvertfald kunne give nogle ideer
Avatar billede Slettet bruger
03. juli 2006 - 14:34 #4
så er der lidt at arbejde med ;)
tak skal du have
Avatar billede arne_v Ekspert
03. juli 2006 - 14:56 #5
saa ligger jeg et svar
Avatar billede Slettet bruger
05. juli 2006 - 00:56 #6
Tusind tak for hjælpen, det var meget brugbart :)
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