2017-08-01 93 views
0

我的MySQL的知识是有限的,以最基础的,但今天我需要做一个复杂的任务,我不知道如何做到以下几点:如何根据比较将整个结果查询划分为多个类别?

我有一个包含三个表列:SEXSITUATIONNUMBER 。这张表格在这里给出了一个关于有多少人是男性/女性,如果他们仍然活跃并且他们的部门中有多少人的想法(这些是其他专栏但是使用它们是没有用的)。

所以,如果我参加了一个随机行从该表中,我能得到

(
    [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; 
    } 
    } 
} 

任何帮助是值得欢迎的,谢谢你提前

回答

2

可以使用条件聚集在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,但如果你犯了一个错误,而聚集你的数据,这将是艰苦的,也可能容易出错。

+0

是的我认为这是正确的答案,你只需要显示在PHP的结果,而不是试图再次做所有的处理。只需循环播放结果并显示即可! –

+0

所以我尝试了你的代码,它*几乎*做我所需要的,但是它计数'女性','积极'等迭代,但不是数字。是否有可能在总结与它们相关的“NUMBER”(在我的例子中,“NUMBER”等于198) – Jaeger

+0

@Jaeger我想知道NUMBER的意义是什么以及您是否想要或者只是数人。感谢您的澄清。 –