1

2 つの列の組み合わせに基づいてカウントを実行することは可能ですか?

私は3つのテーブルを持っています:

学生: Student id | Student name | Gender | Dob |

クラス登録:Student id | Class id

両方の列が複合主キーを構成します。

クラス:Class id | Class name | Class day

各クラスの男女別の生徒数をカウントしたいと思います。

これまでのところ、このクエリを思いつきました:

SELECT class_name AS 'class Name',
  Child_gender AS 'Gender',
  COUNT(student_id) AS 'Count'
FROM student,classRegister,classes
WHERE student.student_id=classRegister.student_id AND
  classRegister.class_id=classes.class_id
GROUP BY class_name,student_gender
ORDER BY class_name;

しかし、一部の学生には重複した結果が得られているようです。

student_idでは、このクエリを変更して、との組み合わせのインスタンス数をカウントできますclass_idか?

私はまだMySQLに非常に慣れていないので、これが誰にとっても基本的なものであれば申し訳ありません

4

2 に答える 2

1

これを試して:

SELECT c.class_name AS 'class Name', s.Child_gender AS 'Gender',
       COUNT(s.student_id) AS 'Count'
FROM student s
INNER JOIN classRegister cr ON s.student_id = cr.student_id 
INNER JOIN classes c ON cr.class_id = c.class_id
GROUP BY s.Child_gender, s.class_id, c.class_name
ORDER BY c.class_name
于 2012-04-30T15:00:48.537 に答える
0
SELECT c.class_name AS 'class Name', s.Child_gender AS 'Gender',
       COUNT(DISTINCT s.student_id) AS 'Count'
FROM student s
INNER JOIN classRegister cr ON s.student_id = cr.student_id 
INNER JOIN classes c ON cr.class_id = c.class_id
GROUP BY c.class_name, s.Child_gender

classRegister に複数の登録がある場合、同じ学生を複数回取得している可能性があります。それはひどく聞こえます。COUNT の DISTINCT は、それらがクラスごとに 1 回だけカウントされるようにする必要があります。

于 2012-04-30T15:09:36.567 に答える