2012-08-06 74 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