Mysql 数据透视表按两列分组

标签 mysql group-by pivot-table

我在使用 Mysql 创建数据透视表时遇到问题。

实际查询如下

SELECT DISTINCT `bills_organization`.`name`,
        IF(`bills_bill`.`os_status`=1,COUNT(`bills_bill`.`os_status`),NULL) AS Unnknown,
        IF(`bills_bill`.`os_status`=2,COUNT(`bills_bill`.`os_status`),NULL) AS Introduced,
        IF(`bills_bill`.`os_status`=3,COUNT(`bills_bill`.`os_status`),NULL) AS Passedonechamber,
        IF(`bills_bill`.`os_status`=4,COUNT(`bills_bill`.`os_status`),NULL) AS Passedbothchambers,
        IF(`bills_bill`.`os_status`=5,COUNT(`bills_bill`.`os_status`),NULL) AS Enacted
FROM `bills_mybill` 
INNER JOIN `auth_user` ON (`bills_mybill`.`user_id` = `auth_user`.`id`) 
LEFT OUTER JOIN `bills_bill` ON (`bills_mybill`.`bill_id` = `bills_bill`.`id`) 
LEFT OUTER JOIN `bills_userprofile` ON (`auth_user`.`id` = `bills_userprofile`.`user_id`) 
LEFT OUTER JOIN `bills_organization` ON (`bills_userprofile`.`organization_id` = `bills_organization`.`id`) 
WHERE `bills_mybill`.`favorite` = TRUE  
GROUP BY `bills_organization`.`name`,`bills_bill`.`os_status`

输出如下

name   Unnknown   Introduced   Passedonechamber   Passedbothchambers   Enacted
NUL    NULL       5            NULL               NULL                 NULL
NULL   NULL       NULL         NULL               1                    NULL
AEE    NULL       16           NULL               NULL                 NULL
AEE    NULL       NULL         1                  NULL                 NULL
AEE    NULL       NULL         NULL              4                     NULL
AEE    NULL       NULL         NULL              NULL                  2
Testing NULL      6            NULL              NULL                  NULL
Testing NULL      NULL         NULL              2                     NULL
Testing NULL      NULL         NULL              NULL                  6

我想要组织并且数在一行中。我不想多行。

提前致谢。

最佳答案

SELECT `bills_organization`.`name`,
        SUM(`bills_bill`.`os_status`=1) AS Unnknown,
        SUM(`bills_bill`.`os_status`=2) AS Introduced,
        SUM(`bills_bill`.`os_status`=3) AS Passedonechamber,
        SUM(`bills_bill`.`os_status`=4) AS Passedbothchambers,
        SUM(`bills_bill`.`os_status`=5) AS Enacted
FROM `bills_mybill` 
INNER JOIN `auth_user` ON (`bills_mybill`.`user_id` = `auth_user`.`id`) 
LEFT OUTER JOIN `bills_bill` ON (`bills_mybill`.`bill_id` = `bills_bill`.`id`) 
LEFT OUTER JOIN `bills_userprofile` ON (`auth_user`.`id` = `bills_userprofile`.`user_id`) 
LEFT OUTER JOIN `bills_organization` ON (`bills_userprofile`.`organization_id` = `bills_organization`.`id`) 
WHERE `bills_mybill`.`favorite` = TRUE  
GROUP BY `bills_organization`.`name`

关于Mysql 数据透视表按两列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19971209/

相关文章:

mysql - 如何在mysql中创建子查询?

sql - elasticsearch - 总金额的总和大于使用聚合的某个金额

c# - 为什么某些数据透视表标签显示错误的年份?

php - 基于 laravel 中的附加数据透视表列进行查询

mysql - 在 mysql 的同一个表中使用 select 的输出更新列

MySQL,如何仅根据其他行数据选择行?

mysql - 将数据导入 MySQL Workbench

mysql - 分组依据而不是在哪里选择?

mysql复杂查询月度报告

excel - 隐藏用于在数据透视表中排序的辅助字段