0

アクティビティごとに、男性の数と女性の数を表示するクエリを作成する必要があります。

できれば3列の形式で、activity_name、male(計算列)、female(計算列)。

ネストされたクエリを使用する必要があると思いますが、その方法がわかりません。または、GROUP BYを使用するだけでこれを実行できますか?

私のテーブルは次のとおりです。

child_idchild_fnamechild_snamechild_genderなど

アクティビティ activity_idactivity_nameなど

Child_Activity_Item child_id activity_id

ありがとうございました

4

2 に答える 2

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

性別を保持する列しかないため、3列の結果を直接取得することはできません。

于 2012-08-06T09:59:53.820 に答える
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
于 2012-08-06T10:03:17.080 に答える