Mailinglisten-Archive |
On Fri, 2 Feb 2001, Andre Krajnik wrote: > Ich habe u.a. eine Datenbank mit Personendaten. Ich möchte nun einen > Select starten, der mir die Altersverteilung ausgibt. > > Also als Beispiel: > unter 18 > 18 - 29 > 30 - 39 > 40 - 49 > 50 - 59 > 60 - 65 > über 65 > > Ist so etwas möglich? Wenn ja, wie? Mich interessieren > a) nur die Anzahl - count(weiblich/männlich) > b) die Namen (in einem 2. Select) Hallo! Beispielstabelle: mysql> select * from people; +-----------+------+------+ | name | age | sex | +-----------+------+------+ | Kaj | 37 | M | | Monty | 38 | M | | My | 13 | F | | Zwanzig | 20 | M | | Zwanzig F | 20 | F | | Siebzig | 70 | F | | Vierzig | 40 | M | | Vierzig F | 40 | F | | Fünfzig | 50 | F | | Sechzig | 60 | M | | Sechzig F | 60 | F | | Fünfzig 2 | 50 | F | +-----------+------+------+ 12 rows in set (0.00 sec) a) mysql> SELECT -> case when age<18 then "unter 18" -> when age<30 then "18-29" -> when age<40 then "30-39" -> when age<50 then "40-49" -> when age<60 then "50-59" -> when age<66 then "60-65" -> else "über 65" end as Gruppe, -> sum(If(sex="M",1,0)) as Männer, -> sum(If(sex="F",1,0)) as Frauen, -> count(*) As Total -> FROM people -> GROUP BY Gruppe -> order by case when age<18 then 1 else 2 end,1; +----------+--------+--------+-------+ | Gruppe | Männer | Frauen | Total | +----------+--------+--------+-------+ | unter 18 | 0 | 1 | 1 | | 18-29 | 1 | 1 | 2 | | 30-39 | 2 | 0 | 2 | | 40-49 | 1 | 1 | 2 | | 50-59 | 0 | 2 | 2 | | 60-65 | 1 | 1 | 2 | | über 65 | 0 | 1 | 1 | +----------+--------+--------+-------+ 7 rows in set (0.00 sec) Der ORDER BY sortiert erst die Kategorie "unter 18", danach mit ",1" in alfabetischer Reihenfolge nach dem ersten Select-Feld, und zwar Gruppe. Ohne den etwas komischen ORDER BY kommt "unter 18" nach "60-65". b) mysql> SELECT -> case when age<18 then "unter 18" -> when age<30 then "18-29" -> when age<40 then "30-39" -> when age<50 then "40-49" -> when age<60 then "50-59" -> when age<66 then "60-65" -> else "über 65" end as Gruppe, -> name -> FROM people -> order by case when age<18 then 1 else 2 end,1; +----------+-----------+ | Gruppe | name | +----------+-----------+ | unter 18 | My | | 18-29 | Zwanzig | | 18-29 | Zwanzig F | | 30-39 | Kaj | | 30-39 | Monty | | 40-49 | Vierzig | | 40-49 | Vierzig F | | 50-59 | Fünfzig | | 50-59 | Fünfzig 2 | | 60-65 | Sechzig | | 60-65 | Sechzig F | | über 65 | Siebzig | +----------+-----------+ 12 rows in set (0.00 sec) Gruß, Kaj -- mysql_(at)_polycon.fi http://www.polycon.fi/mysql/ --- *** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive