将多行的选定列组合成一行

时间:2015-09-08 14:22:22

标签: mysql sql

我想算出男性和女性的数量。每个年龄的每个宗教的女性用户获得如下表第三个表格的结果表。

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 

1 个答案:

答案 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());

Sample SQL Fiddle

相关问题