Php 如何根据比较将整个结果查询划分为类别?
我的MySQL知识仅限于最基本的知识,但今天我需要完成一项复杂的任务,我不知道如何完成以下任务: 我有一个包含三列的表格:Php 如何根据比较将整个结果查询划分为类别?,php,mysql,Php,Mysql,我的MySQL知识仅限于最基本的知识,但今天我需要完成一项复杂的任务,我不知道如何完成以下任务: 我有一个包含三列的表格:SEX、SITUATION和NUMBER。此表给出了多少人是男性/女性,如果他们仍然活跃,以及他们所在部门有多少人(这些是其他列,但没有用) 所以,如果我从这个表中随机抽取一行,我可以得到 ( [SEX] => 'FEMALE', [SITUATION] => 'ACTIVE', [NUMBER] => 198 ) 我的目标是,当
SEX
、SITUATION
和NUMBER
。此表给出了多少人是男性/女性,如果他们仍然活跃,以及他们所在部门有多少人(这些是其他列,但没有用)
所以,如果我从这个表中随机抽取一行,我可以得到
(
[SEX] => 'FEMALE',
[SITUATION] => 'ACTIVE',
[NUMBER] => 198
)
我的目标是,当我执行SQL请求时,它将返回4个“组”,其中包含“可能性:有多少人是活跃女性、退休女性、活跃男性和退休男性”。我猜结果如下所示:
(
[active_women] => 8452,
[retired_women] => 123,
[active_men] => 9523,
[retired_men] => 876
)
这是我用PHP处理结果的方式,如果它能帮助您:
// $results contains the result of "SELECT SEX, NUMBER, SITUATION FROM table";
foreach($results as $i => $result) {
if($result->SEX === 'MAN') {
if($result->SITUATION === 'ACTIVE') {
$stat1['active_men'] += $result->NUMBER;
}
else {
$stat1['retired_men'] += $result->NUMBER;
}
}
elseif ($result->SEX === 'WOMAN') {
if($result->SITUATION === 'ACTIF') {
$stat1['active_women'] += $result->NUMBER;
}
else {
$stat1['retired_women'] += $result->NUMBER;
}
}
}
欢迎任何帮助,请提前感谢您可以在MySQL中使用条件聚合来处理此计算
SELECT
SUM(CASE WHEN SEX = 'FEMALE' AND SITUATION = 'ACTIVE'
THEN NUMBER ELSE 0 END) AS active_women,
SUM(CASE WHEN SEX = 'FEMALE' AND SITUATION = 'RETIRED'
THEN NUMBER ELSE 0 END) AS retired_women,
SUM(CASE WHEN SEX = 'MALE' AND SITUATION = 'ACTIVE'
THEN NUMBER ELSE 0 END) AS active_men,
SUM(CASE WHEN SEX = 'MALE' AND SITUATION = 'RETIRED'
THEN NUMBER ELSE 0 END) AS retired_men
FROM yourTable
您也可以像在PHP中一样继续操作,但如果在聚合数据时出错,这将是一项艰巨的任务,而且可能会出错。您可以在MySQL中使用条件聚合来处理此计算
SELECT
SUM(CASE WHEN SEX = 'FEMALE' AND SITUATION = 'ACTIVE'
THEN NUMBER ELSE 0 END) AS active_women,
SUM(CASE WHEN SEX = 'FEMALE' AND SITUATION = 'RETIRED'
THEN NUMBER ELSE 0 END) AS retired_women,
SUM(CASE WHEN SEX = 'MALE' AND SITUATION = 'ACTIVE'
THEN NUMBER ELSE 0 END) AS active_men,
SUM(CASE WHEN SEX = 'MALE' AND SITUATION = 'RETIRED'
THEN NUMBER ELSE 0 END) AS retired_men
FROM yourTable
您也可以像在PHP中一样继续操作,但如果在聚合数据时出错,这将非常费劲,而且可能容易出错。是的,我认为这是正确的答案,您只需要在PHP中显示结果,而不需要再次尝试进行所有处理。只需循环结果并显示!因此我尝试d你的代码,它几乎满足了我的需要,但是它计算了“女性”、“活动”等的迭代次数,但不计算数字。是否有可能,以某种方式,将它们各自对应的
数字
相加(在我的示例中,数字
等于198)@Jaeger我想知道NUMBER
的意义是什么,你是想统计还是只统计人数。谢谢你的澄清。@Jaeger我想知道NUMBER
的意义是什么,你是想统计还是只统计人数。谢谢你的分类。非常感谢,不是这样的毕竟这并不难(但我想我自己也不会发现)是的,我认为这是正确的答案,你只需要在PHP中显示结果,而不是尝试再次进行所有处理。只需循环结果并显示!因此我尝试了你的代码,它几乎满足了我的需要,但是它计算了“女性”、“活动”等的迭代次数,而不是数字。不知何故,是否有可能嗯,它们各自对应的NUMBER
(在我的示例中,NUMBER
等于198)@Jaeger我想知道NUMBER
的意义是什么,你是想统计还是只统计人数。谢谢你的澄清。@Jaeger我想知道NUMBER
的意义是什么,你是想统计还是只统计人数。谢谢你的分类。非常感谢,不是这样的毕竟这并不难(但我想我自己也不会发现)