我想算出男性和女性的数量。每个年龄的每个宗教的女性用户获得如下表第三个表格的结果表。
tbl_user:
id name dob gender religion
1 raj 1999-12-21 m 1
7 raju 1998-10-10 m 2
8 rajan 2000-11-23 m 3
11 neetu 1992-12-06 f 1
12 sita 1993-06-16 f 2
13 rita 1992-06-08 f 3
14 jenny 1993-05-10 f 2
15 manju 1993-12-16 f 1
16 aanju 1993-03-05 f 3
17 raja 1995-04-06 m 1
18 rajendra 1995-07-03 m 2
19 rajesh 1991-05-02 m 3
tbl_religion:
id name
1 Christian
2 Hindu
3 Islam
现在我要计算男性和女性的数量。每个年龄的每个宗教的女性用户获得如下所示的结果表。用户可以是任何年龄或任何一年出生的人:
Age Christian Male Christian Female Hindu Male Hindu Female Islam Male Islam Female
14 0 0 0 0 1 0
15 1 0 0 0 0 0
16 0 0 1 0 0 0
20 1 0 1 0 0 0
21 0 1 0 0 0 0
22 0 1 0 2 0 1
23 0 0 0 0 1 1
24 0 0 0 0 0 0
答案 0 :(得分:0)
您可以使用timestampdiff
函数计算年龄,并使用条件聚合来计算每个类别中的数字,如下所示。
select
timestampdiff(year, dob, now()) age
, sum(gender = 'm' and r.name = 'Christian') Christian_Male
, sum(gender = 'f' and r.name = 'Christian') Christian_Female
, sum(gender = 'm' and r.name = 'Hindu') Hindu_Male
, sum(gender = 'f' and r.name = 'Hindu') Hindu_Female
, sum(gender = 'm' and r.name = 'Islam') Islam_Male
, sum(gender = 'f' and r.name = 'Islam') Islam_Female
from tbl_user u
join tbl_religion r on u.religion = r.id
group by timestampdiff(year, dob, now());