Mysql 将多行的选定列合并为一行
我想计算每个年龄段每个宗教的男性和女性使用者的数量,以获得一个结果表,如下面的第三个表 tbl_用户:Mysql 将多行的选定列合并为一行,mysql,sql,Mysql,Sql,我想计算每个年龄段每个宗教的男性和女性使用者的数量,以获得一个结果表,如下面的第三个表 tbl_用户: 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
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_宗教:
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
您可以使用
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());
谢谢,Jpw。这是一个很大的帮助。非常感谢你的努力。:)