30. juni 2006 - 09:24Der 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 ;)
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);
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)
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.