在mysql查询中对数据进行分组或透视以使行成为列

时间:2012-03-31 05:42:58

标签: mysql

我只是在解决我需要的查询时遇到麻烦。我有这样的场景

colDist       colGender           attnedancePrcnt
Place-1        Male                 2.5 %
Place-1        Female               1.5%
Place-2        Male                 3.5%
Place-2        Female               2.1%

现在我需要在mysql中查询以获得这样的数据

colDist       colMale           colFemale
Place-1        2.5%                1.5 %
Place-2        3.5%                2.1 % 

这是由coldDist组成的一组,但我只是遇到麻烦,将colMale和colFemale从第一个数据集转换为第二个数据集。

预感谢。

这种方法.....

select colDist, if(colGender='Male',colGender,null ) as   colMale ,
        if(colGender='Female',colGender,null ) as   colFemale 
 from tablename

给我这样的结果

colDist       colMale           colFemale          attnedancePrcnt
Place-1        Male                NULL                 2.5
Place-1        NULL                Female               1.5
Place-2        Male                NULL                 3.5
Place-2        NULL                Female               2.1

但我再次需要他们:

colDist       colMale           colFemale
Place-1        2.5%                1.5 %
Place-2        3.5%                2.1 % 

那么如何根据需要对数据进行分组或透视?

感谢。

2 个答案:

答案 0 :(得分:1)

检查它是否按预期工作:

 select colDist, if(colGender='Male',colGender,null ) as   colMale ,
        if(colGender='Female',colGender,null ) as   colFemale 
 from tablename

答案 1 :(得分:1)

SELECT
    t1.colDist,
    t1.attnedancePrcnt AS colMale,
    t2.attnedancePrcnt AS colFemale
FROM
    tablename AS t1
INNER JOIN tablename AS t2 ON t1.colDist = t2.colDist
AND t1.colGender != t2.colGender
WHERE
    t1.colGender = 'Male'

值得注意的是,“attnedance”应该拼写为“出席”。