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

 少年放肆的温存 发布于 2023-02-10 21:49

我有以下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 个回答
  • 下面的查询将按记录分组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
    

    SQLFiddle演示

    请注意,它不包括主题change = 0.

    2023-02-10 21:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有