通过某些列mysql查询计算正值和负值组的数量

时间:2013-12-13 17:29:16

标签: mysql count

我有以下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查询会是什么?

1 个答案:

答案 0 :(得分:8)

下面的查询会按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的主题。