2012-08-06 80 views
0

我需要編寫一個查詢,以顯示每個活動的男性人數和女性人數。MySQL - 我需要嵌套查詢嗎?

最好以3列格式,activity_name,男性(計算列),女性(計算列)。

我想我可能需要使用嵌套查詢,但我無法弄清楚如何。或者可以通過使用GROUP BY來完成?

我的表是:

兒童 child_id child_fname child_sname child_gender 等等等等

活動 ACTIVITY_ID ACTIVITY_NAME 等等等等

Child_Activity_Item child_id ACTIVITY_ID

謝謝

回答

0

嘗試此查詢 -

SELECT 
    a.activity_id, 
    a.activity_name, 
    COUNT(IF(c.child_gender = 'M', c.child_gender, NULL)) male, 
    COUNT(IF(c.child_gender = 'F', c.child_gender, NULL)) female 
FROM 
    Activity a 
    JOIN Child_Activity_Item ca 
    ON ca.activity_id = a.activity_id 
    JOIN Child c 
    ON c.child_id = ca.child_id 
GROUP BY a.activity_id 
+0

謝謝,請問使用JOIN和WHERE之間是否有區別?由於我的學位課程沒有被教授加入,所以對我來說這是新的! – 2012-08-06 10:16:09

+0

在這種情況下,您可以在WHERE條件下使用'FROM table1,table2,table3',結果將相同。我只提供使用JOIN子句。 – Devart 2012-08-06 10:22:26

+0

好的,謝謝。是的,這是我一直在做的:) – 2012-08-06 10:47:42

0

這是你在找什麼:

SELECT MaleList.Activity_Name, 
     MaleList.totalMale, 
     FemaleList.totalFemale, 
FROM 
(
    SELECT a.Activity_ID, 
      a.Activity_Name, 
      COUNT(c.child_gender) totalMale 
    FROM Activity a 
       INNER JOIN Child_Activity_Item b 
        on a.activity_id = b.activity_ID 
       INNER JOIN Child c 
        on b.child_id = c.child_id 
    WHERE c.child_gender = 'male' 
    Group BY a.Activity_ID 
) as MaleList INNER JOIN 
(
    SELECT a.Activity_ID, 
      a.Activity_Name, 
      COUNT(c.child_gender) totalFemale 
    FROM Activity a 
       INNER JOIN Child_Activity_Item b 
        on a.activity_id = b.activity_ID 
       INNER JOIN Child c 
        on b.child_id = c.child_id 
    WHERE c.child_gender = 'female' 
    Group BY a.Activity_ID 
) as FemaleList 
    ON MaleList.Activity_ID = FemaleList.Activity_ID 

你不能直接獲得一個三列的結果,因爲只有唯一的列持有性別。

+0

謝謝你,我會試試這個! – 2012-08-06 10:17:13