Re: Altersgruppe/-klasse (cluster) abfragen

Re: Altersgruppe/-klasse (cluster) abfragen

am 20.12.2006 16:04:59 von Andreas Stieger

Hi,

Johannes Vogel schrieb:
> floor((year(now())-year(geburtstag))/10)*10 =:

Ohne now() - geburtstag kannst du aber ein Jahr daneben liegen.

und das /10 * 10 geht auch mit TRUNCATE(...,-1)

Gruß,
Andreas

Altersgruppe/-klasse (cluster) abfragen

am 20.12.2006 16:33:50 von Christian Schmidt

Hallo,

ich habe eine Tabelle mit Geburtstagen und ich möchte die Anzahl der
Personen in verschiedenen Altersklassen wissen. Gibt es da eine einfache
Abfragemöglichkeit in MySQL?

Das Ergebnis soll in etwas so aussehen:
Klasse | Anzahl
================
20-30 | 24
40-50 | 17
50-60 | 3

Gruß

Christian

Re: Altersgruppe/-klasse (cluster) abfragen

am 20.12.2006 16:49:11 von Johannes Vogel

Hi Christian

Christian Schmidt wrote:
> ich habe eine Tabelle mit Geburtstagen und ich möchte die Anzahl der
> Personen in verschiedenen Altersklassen wissen. Gibt es da eine einfache
> Abfragemöglichkeit in MySQL?
> Das Ergebnis soll in etwas so aussehen:
> Klasse | Anzahl
> ================
> 20-30 | 24
> 40-50 | 17
> 50-60 | 3

Niemand zwischen 30 und 40 Jahre alt?

floor((year(now())-year(geburtstag))/10)*10 =:

select concat(,'-',+10) as Klasse, count(*) as Anzahl
from Tabelle group by Klasse;

HTH, Johannes

Re: Altersgruppe/-klasse (cluster) abfragen

am 20.12.2006 17:25:08 von Andreas Stieger

Hallo,

Christian Schmidt schrieb:
> Tabelle mit Geburtstagen
...
> Anzahl der Personen in verschiedenen Altersklassen wissen.

SELECT
TRUNCATE(
EXTRACT(YEAR FROM CURDATE()) -
EXTRACT(YEAR FROM geb)
-
(
SIGN(
DATE_ADD(geb,
INTERVAL
(
EXTRACT(YEAR FROM CURDATE()) -
EXTRACT(YEAR FROM geb)
)
YEAR
)
- CURDATE()
- 1
)
+ 1
) / 2,
-1)
AS agegroup,
count(*)
FROM geb
GROUP BY agegroup;


Gruß,
Andreas

Re: Altersgruppe/-klasse (cluster) abfragen

am 20.12.2006 20:16:43 von Andreas Stieger

Andreas Stieger wrote:

> Hallo,
>
> Christian Schmidt schrieb:
>> Tabelle mit Geburtstagen
> ..
>> Anzahl der Personen in verschiedenen Altersklassen wissen.
>

natürlich muss da 2x SIGN() rein...

select
TRUNCATE(
EXTRACT(YEAR FROM CURDATE()) -
EXTRACT(YEAR FROM geb)
-
SIGN(
SIGN(
DATE_ADD(geb,
INTERVAL
(
EXTRACT(YEAR FROM CURDATE()) -
EXTRACT(YEAR FROM geb)
)
YEAR
)
- CURDATE()
- 1
)
+ 1
),
- 1
) AS agegroup,
count(*) AS count
FROM geb
GROUP BY agegroup;


Das pretty-printing bleibt als Hausaufgabe :-)

Gruß,
Andreas