我正在处理如下表,表名是信息:
-------------------------------
|id | gender | country | age |
-------------------------------
| 1 | F | America | 18 |
-------------------------------
| 2 | M | America | 22 |
-------------------------------
| 3 | M | Japan | 30 |
-------------------------------
| 4 | M | Brazil | 32 |
-------------------------------
| 5 | F | Norway | 34 |
-------------------------------
| 7 | M | America | 32 |
-------------------------------
|10 | F | Norway | 22 |
-------------------------------
|13 | F | Japan | 36 |
-------------------------------
|14 | F | Brazil | 19 |
-------------------------------
|25 | F | Japan | 33 |
-------------------------------
我希望输出是:
------------------------------------------------------
| country | total | Female | Male | 18 - 25 | 26 -35 |
------------------------------------------------------
| America | 3 | 1 | 2 | 2 | 1 |
------------------------------------------------------
| Japan | 3 | 2 | 1 | 0 | 3 |
------------------------------------------------------
| Brazil | 2 | 1 | 1 | 1 | 1 |
------------------------------------------------------
| Norway | 2 | 2 | 0 | 1 | 1 |
------------------------------------------------------
以下是我的方法,首先按国家和性别计算不同的 id 组:
SELECT country, gender, COUNT(DISTINCT id) FROM information GROUP BY 1,2;
然后尝试创建具有年龄范围的表:
(SELECT '18-25' AS '18-25'
SUM(CASE WHEN (AGE >=18 AND AGE<=25) THEN 1 ELSE 0 END) AS NUM FROM information)
UNION
(SELECT '26-35' AS '18-25'
SUM(CASE WHEN (AGE >=26 AND AGE<=35) THEN 1 ELSE 0 END) AS NUM FROM information)
但我不确定如何组合它们并将列转换为行。谁能给我一些建议?