3

私は3つのテーブルを持つmysqlデータベースを持っています

学生student_intervention介入の詳細

私は、すべての学生を表示し、各介入タイプの列を持ち、各学生のさまざまなタイプの介入を合計したピボットテーブルビューを作成しようとしています。

これまでのところ私は

 SELECT  t.`first_name`, t.`last_name`, t.`student_id`,
        Count(IF(t.`intervention_details_id` = 1, 1, null)) AS Intervention1,
        Count(IF(t.`intervention_details_id` = 0, 1, null)) AS Intervention2
 FROM  (
            SELECT student.`student_id`,  student.`first_name`,
                    student.`last_name`,
                    `student_intervention`.`intervention_details_id`
            FROM student, student_intervention 
            WHERE student_intervention.student_id = student.`student_id`
            ) t 
 GROUP BY t.student_id

これは機能しますが、介入がある学生のデータのみが表示されます。介入のない学生を含む学生の完全なリストが欲しいです。JOINが必要だと思いますが、正しいものがわかりません。

誰か助けてもらえますか?

4

1 に答える 1

2

LEFT JOIN代わりに使用してください

SELECT  a.`student_id`,  
        a.`first_name`,
        a.`last_name`,
        SUM(IF(COALESCE(b.`intervention_details_id`,0) = 1, 1, 0)) Intervention1,
        SUM(IF(COALESCE(b.`intervention_details_id`,0) = 0, 1, 0)) Intervention2
FROM    student a
        LEFT JOIN student_intervention b
            ON b.student_id = a.`student_id`
GROUP BY a.`student_id`, a.`first_name`, a.`last_name`

プリペアドステートメントが必要な場合

SET @sql = NULL;

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(CASE WHEN COALESCE(b.intervention_details_id ,0) = ',
      COALESCE(b.intervention_details_id ,0),
      ' THEN 1 ELSE 0 END) AS ',
      COALESCE(b.intervention_details_id ,0)
    )
  ) INTO @sql
FROM    student a 
        LEFT JOIN student_intervention b
            ON b.student_id = a.student_id;

SET @sql = CONCAT('SELECT  a.student_id , a.first_name , a.last_name , ', @sql, ' 
                   FROM     student a
                            LEFT JOIN student_intervention b
                                ON b.student_id = a.student_id 
                    GROUP BY a.student_id , a.first_name , a.last_name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
于 2012-11-22T15:19:53.270 に答える