2

私は周りをよく見ましたが、私のものと一致する質問を見つけることができませんでした. 検索などで適切な言語を使用していない可能性がありますが、ここに行きます。

私はこのようなクラスと呼ばれるSQLテーブルを持っています

Student_Name | Class  
--------------------  
Edgar        | Chemistry  
Allan        | Chemistry  
Burt         | Chemistry  
Edgar        | Math  
Sue          | Math  
Hamilton     | Math  
Edgar        | English  
Sue          | English  
Edgar        | German  
Ben          | German  

数学とドイツ語の両方を取っている学生の数を数えたい.

この例では、次のことを前提としています。 - 生徒の名前は一意です。 - 1 人の生徒が複数のクラスを持つことができます。

論理的には、select ステートメントを使用して、数学を受講している学生の結果セットを取得します。次に、結果セットから各 Student_Name を調べてテーブルと照合し、ドイツ語を学んでいる学生の数を確認します。

この場合、Edgar だけが数学とドイツ語の両方を取っているので、1 が返されると予想します。

これまでに試したクエリのいくつかを次に示します:-(

これは、DISTINCT に関するいくつかの調査を行った後のものです。

SELECT COUNT(DISTINCT Student_Name) FROM Classes WHERE Class = 'Math' AND Class = 'German';

そして、これは GROUP BY について詳しく調べた後のものです。

SELECT COUNT(*) FROM (
    SELECT DISTINCT Student_Name FROM Classes 
    WHERE Class IN ( 'Math', 'German' ) 
    GROUP BY Student_Name
);

これらのどちらもまったく正しくありませんでした。どんな助けでも大歓迎です。

4

2 に答える 2

5
SELECT  COUNT(*) totalStudent
FROM
        (
            SELECT  student_name
            FROM    Classes
            WHERE   class IN ('Math','German')
            GROUP   BY student_name
            HAVING  COUNT(*) = 2
        ) subAlias

出力

╔══════════════╗
║ TOTALSTUDENT ║
╠══════════════╣
║            1 ║
╚══════════════╝
于 2013-05-16T15:47:53.417 に答える