2017-08-01 28 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的意義是什麼以及您是否想要或者只是數人。感謝您的澄清。 –

相關問題