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