下面是mysql表的布局:
+------+-------+-----+------+
| user |subject|month|change|
+------+-------+-----+------+
|Donald| Math | Jan | 3.15 |
+------+-------+-----+------+
| Mike | Math | Jan | 2.15 |
+------+-------+-----+------+
|Regan | Math | Jan | 3.00 |
+------+-------+-----+------+
|Donald| Engl | Febr|-3.05 |
+------+-------+-----+------+
| Mike | Engl | Febr| 3.00 |
+------+-------+-----+------+
|Regan | Engl | Febr|-3.00 |
+------+-------+-----+------+
|Donald| Geog | Jan | 3.00 |
+------+-------+-----+------+
| Mike | Geog | Jan |-2.15 |
+------+-------+-----+------+
|Regan | Geog | Jan | 3.60 |
+------+-------+-----+------+我要按科目数正或负变化组,同时得到小组的名称。如果我像这样查询mysql表:
COUNT (*) FROM $table WHERE change>0 GROUP BY subject它将只按主题列计算正变化(>0)组的数目。不可能获得负更改的数量(<0)并获得组名(Math、Eng & Geog)。
我希望结果应该是这样:
===============
Group | >0| <0|
===============
Math | 3 | 0 |
---------------
Eng | 1 | 2 |
---------------
Geog | 2 | 1 |
---------------为了获得像上面这样的结果,什么是单一的mysql查询?
发布于 2013-12-13 17:33:05
下面的查询将按subject对记录进行分组。MySQL支持布尔算法,因为a.change > 0返回1表示true,0返回false。
SELECT a.Subject,
SUM(a.change > 0) `> 0`,
SUM(a.change < 0) `< 0`
FROM tableName a
GROUP BY a.Subject注意,它不包括change = 0中的主题。
https://stackoverflow.com/questions/20572494
复制相似问题