php - 行成列查询 MySql

标签 php mysql

我有这张表:

ID   CODE   WEEK  SEX
1    abc    1     F
2    abc    2     M
3    xyz    3     F
4    abc    1     M

我正在使用这个查询来过滤数据:

SELECT `code`,`week`,`sex`, COUNT(`week`) as cnt 
FROM `table` 
WHERE `code` = "abc" 
and `sex` = "F" 
group by `week` 
having (`week` > 0) 
UNION ALL 
SELECT `code`,`week`,`sex`, COUNT(`week`) as cnt 
FROM `table` 
WHERE `code` = "abc" 
and `sex` = "M"
group by `week` 
having (`week` > 0)

这是结果:

CODE   WEEK   SEX  cnt
abc    1      F    1
abc    1      M    1
abc    2      M    1

但现在我需要以这种方式显示数据:

CODE   WEEK  M  F
abc    1     1  1
abc    2     1  0

所以我有这个查询:

SELECT  
`WEEK`,`CODE`,  
GROUP_CONCAT(if(`SEX` = "F", `cnt`, NULL)) AS "F", 
GROUP_CONCAT(if(`SEX` = "M", `cnt`, NULL)) AS "M" 
FROM `temp_table`
GROUP BY `WEEK` 
ORDER BY CAST(`WEEK` AS UNSIGNED)

如何组合这 2 个查询?有一个更好的方法吗?

最佳答案

SELECT `WEEK`,`CODE`
, SUM(IF(`SEX` = "F", cnt, 0)) AS `F`
, SUM(IF(`SEX` = "M", cnt, 0)) AS `M`
FROM `table`
GROUP BY `WEEK`,`CODE`
;

我不确定您为什么要执行那个奇怪的 ORDER BY,而且我很确定您也想在 CODE 上分组。 (编辑:是的,CAST 适合星期的数据类型。)

如果使用第一个查询作为“来源”,请参见下文:

SELECT `WEEK`,`CODE`
, SUM(IF(`SEX` = "F", 1, 0)) AS `F`
, SUM(IF(`SEX` = "M", 1, 0)) AS `M`
FROM ([original query goes in here]) `subQ`
GROUP BY `WEEK`,`CODE`
;

关于php - 行成列查询 MySql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30199353/

相关文章:

javascript - 使用带循环的 AJAX 更新表

php - 制作 PHP CSS 和 HTML 进度条

MySQL 回填缺失数据,其中记录有一个公共(public)字段

java - Hibernate DELETE查询错误导致: com. mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表 'gestcart.loanpersonrelation'不存在

mysql - 插入忽略不会忽略mysql中的重复项

mysql - 如何将容器网络放入 kubernetes YAML 文件

php - 比较两个具有相同结构的 XML 文件并找出差异

php - 在 Codeigniter 中超过最大文件大小时不显示错误消息

phpMyAdmin - 不显示选择结果

mysql - 创建一个 mySQL View ,其中每一行都是同一行中特定列的值