0

3つの列を持つ学生テーブルがあります

1. Student Name
2. Class Name
3. Test result

学生は、結果が異なる複数のテストを受けます。ある別のテーブルにデータを取得しようとしています

1. Stundent Name+CLass Name ( Concatenated )
2. Pass (No of tests Passed)
3. Fail (No of tests failed)
4. Absent (No of tests Absent)

私が使う

select count(*)
from Student 
where Result in ('Passed')
group by StuName, ClassName;

stu+class の組み合わせごとに渡されたサブジェクトの数を取得します。失敗したテストや不在のテストについても同様です。

テーブル 2 に挿入するには、コードをどのように変更すればよいですか??

4

3 に答える 3

4

MySQL はインライン IFステートメントをサポートしています。

SELECT  CONCAT(StudentName, ' ', ClassName) Student_Class,
        SUM(test = 'PASSED') totalPass,
        SUM(test = 'Failed') totalFailed,
        SUM(test = 'Absent') totalAbsent
FROM    student
GROUP   BY CONCAT(StudentName, ' ', ClassName)

上記のクエリの結果を挿入する場合は、INSERT INTO..SELECTステートメントを使用します。

INSERT  INTO tableNAME(col1, totalPass, totalFailed, totalAbsent)
SELECT  CONCAT(StudentName, ' ', ClassName) Student_Class,
        SUM(test = 'PASSED') totalPass,
        SUM(test = 'Failed') totalFailed,
        SUM(test = 'Absent') totalAbsent
FROM    student
GROUP   BY CONCAT(StudentName, ' ', ClassName)
于 2013-03-01T14:14:47.323 に答える
2

次の集計関数を使用して、データを簡単にピボットCASEできます。

select concat(StuName, ',', ClassName) StuNameClass,
  sum(case when result = 'Passed' then 1 else 0 end) Passed,
  sum(case when result = 'Fail' then 1 else 0 end) Fail,
  sum(case when result = 'Absent' then 1 else 0 end) Absent
from Student 
group by concat(StuName, ',', ClassName);

次に、データを他のテーブルに挿入する場合:

insert into Table2 (StudentClassName, Passed, Fail, Absent)
select concat(StuName, ',', ClassName) StuNameClass,
  sum(case when result = 'Passed' then 1 else 0 end) Passed,
  sum(case when result = 'Fail' then 1 else 0 end) Fail,
  sum(case when result = 'Absent' then 1 else 0 end) Absent
from Student 
group by concat(StuName, ',', ClassName);
于 2013-03-01T14:15:24.873 に答える
1
INSERT INTO t (name_class, passed_count, failed_count, absent_count)
SELECT CONCAT(StuName, ' ', ClassName) AS name_class, 
       SUM(IF(Result='Passed', 1, 0)) AS passed_count, 
       SUM(IF(Result='Failed', 1, 0)) AS failed_count, 
       SUM(IF(Result='Absent', 1, 0)) AS absent_count
FROM Student
GROUP BY StuName, ClassName;
于 2013-03-01T14:18:29.770 に答える