Mysql 使用group子句和聚合函数对行数据进行操作

Mysql 使用group子句和聚合函数对行数据进行操作,mysql,group-by,aggregate-functions,mysql-workbench,Mysql,Group By,Aggregate Functions,Mysql Workbench,这是表a的一个片段: station code ChildLabour DrinkingWater staA 01 3 4 staA 03 2 1 staB 05 5 10 我正在尝试对该表进行查询,结果如下所示: 查询结果说明: 根据站点和代码,计算

这是表a的一个片段:

station       code     ChildLabour         DrinkingWater
staA           01       3                    4
staA           03       2                    1
staB           05       5                    10
我正在尝试对该表进行查询,结果如下所示: 查询结果说明: 根据站点和代码,计算ChildLabor值为yes的人数并显示结果。还计算饮用水值为“是”的人数,并显示每个站点的结果和相应代码

station       code     ChildLabour         DrinkingWater
staA           01       3                    4
staA           03       2                    1
staB           05       5                    10
到目前为止,我的查询如下:

station       code     ChildLabour         DrinkingWater
staA           01       3                    4
staA           03       2                    1
staB           05       5                    10
select distinct station,code, 
       (select count(persons) from `tableA` 
        where childLabour='Yes' 
        group by `station,code`) as `childLabour`
from `tableA` order by code `asc`;
但它会生成错误的结果,如下所示: 查询在整个列中显示其childLabour值=Yes的所有人员的相同值Total

station       code     ChildLabour         DrinkingWater
staA           01       3                    4
staA           03       2                    1
staB           05       5                    10
station code ChildLabour  DrinkingWater
staA     01     3           4
staA     03     3           4
staB     05     3           4
我该如何解决这个问题,我相信这不是一个大问题

可以尝试使用SUM并仅对有效值求和-等于yes:

station       code     ChildLabour         DrinkingWater
staA           01       3                    4
staA           03       2                    1
staB           05       5                    10
SELECT station, code, SUM(IF(childLabour = 'Yes', 1, 0)), SUM(IF(DrinkingWater = 'Yes', 1, 0))
FROM tableA
GROUP BY station, code
结果:

station       code     ChildLabour         DrinkingWater
staA           01       3                    4
staA           03       2                    1
staB           05       5                    10
staA    01  1   3
staA    03  0   0
staB    05  2   3
staC    03  1   0
staC    04  0   1
说明:

station       code     ChildLabour         DrinkingWater
staA           01       3                    4
staA           03       2                    1
staB           05       5                    10
station     code    persons    childLabour    DrinkingWater
staA         01     isaac      No               Yes
staA         01     Gera       No               No
staA         01     Allen      No               Yes
staA         01     Jean       Yes              Yes
                                1               3
staA         03     Jeff       No               No
                                0               0
staB         05     Saleh      No               Yes
staB         05     Jane       Yes              Yes
staB         05     zoltan     Yes              Yes
                                2               3
staC         03     Henry      Yes              Nn
                                1               0
staC         04     Billy      No               Yes
                                0               1
这些是结果,也是我得到它们的原因

station       code     ChildLabour         DrinkingWater
staA           01       3                    4
staA           03       2                    1
staB           05       5                    10

不起作用,查询在ChildLabour列中返回0。。。但我需要童工价值=是的人的总数或计数!根据您提供的数据,再看一看,我得到的输出以及为什么-您在问题上提供的相同数据上没有得到相同的结果?查看查询:按站点从主组中选择station,code,SUMIFchildLabour='Yes',1,0,code;如果童工为是,则if返回1。我需要count/sum函数来计算条件设置为true的人数……对于每个分组的[站点和代码]。->您的查询没有得到正确的结果!我不明白结果集与数据集的关系。结果集:这是我想要得到的结果。。。
station       code     ChildLabour         DrinkingWater
staA           01       3                    4
staA           03       2                    1
staB           05       5                    10