Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将多行的选定列合并为一行_Mysql_Sql - Fatal编程技术网

Mysql 将多行的选定列合并为一行

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

我想计算每个年龄段每个宗教的男性和女性使用者的数量,以获得一个结果表,如下面的第三个表

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       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。这是一个很大的帮助。非常感谢你的努力。:)