【发布时间】:2015-07-03 18:09:13
【问题描述】:
我有这样的数据:
+-------+--------+---------------------+
| name | status | date |
+-------+--------+---------------------+
| Peter | 100 | 2015-06-20 12:12:00 |
| Peter | 100 | 2015-06-20 15:12:00 |
| James | 100 | 2015-06-20 10:12:00 |
| James | 200 | 2015-06-20 14:12:00 |
| James | 100 | 2015-06-21 06:12:00 |
| James | 100 | 2015-06-21 09:12:00 |
| Peter | 200 | 2015-06-21 13:12:00 |
| Peter | 100 | 2015-06-21 14:12:00 |
我想要这样的输出:
+----------+-------+-------+-------+
| date | Peter | James | Total |
+----------+-------+-------+-------+
| 20150620 | 2 | 2 | 4 |
| 20150621 | 2 | 2 | 4 |
+----------+-------+-------+-------+
我使用下面的select 语句:
select DATE_FORMAT(date, "%Y%m%d") as date,
SUM(IF(name = "Peter", 1,0)) AS "Peter",
SUM(IF(name = "James", 1,0)) AS "James",
SUM(IF(name != "0", 1,0)) AS "Total"
from test group by DAYOFMONTH (date);
但是,如果我有很多名称值,我该怎么办?我不能把所有的名字都放在
select state in SUM(IF name ="????").
【问题讨论】:
-
您正在寻找表格旋转。如果你 Google
mysql pivot你会得到很多教程和相关的 SO 问题。看看这个:stratosprovatopoulos.com/web-development/mysql/… -
MySQL pivot table的可能重复