0

ここで SECTION_ID AS SECTIONS と ENROLL_DATE AS STUDENTS を数えようとしていますが、セクション列からではなく、学生列から正しい結果を得ています。ENROLLMENT テーブルからではなく、SECTION テーブルから SECTION_ID のみが必要なので、マイナス セット操作を行いました。両方のテーブルから結果が得られるのはなぜですか? SECTION テーブルからのみ結果を取得するにはどうすればよいですか?

 SELECT s.LOCATION,COUNT(s.SECTION_ID) AS SECTIONS, COUNT(e.ENROLL_DATE) AS STUDENTS
 FROM SECTION s
 JOIN ENROLLMENT e
 ON s.SECTION_ID = e.SECTION_ID
 WHERE EXISTS (

           SELECT SECTION_ID
           FROM SECTION
            MINUS
           SELECT SECTION_ID
           FROM ENROLLMENT

            )
 AND s.SECTION_ID = e.SECTION_ID
 GROUP BY s.LOCATION
 ORDER BY s.LOCATION;

私はこの結果を得ています

 LOCATION  SECTIONS   STUDENTS
 ---------- ---------- ----------
   H310        1        1
   L206        8        8
   L210        29       29
   L211        10       10
   L214        36       36
   etc

欲しい結果

 LOCATION  SECTIONS   STUDENTS
 ---------- ---------- ----------
   H310        1        1
   L206        1        8
   L210        10       29
   L211        3        10
   L214        15       36
   etc
4

2 に答える 2

1

これらの結果を生成するサンプル データがないとわかりにくいですが、個別のカウントが必要な場合があると思います。

Select
    s.location,
    count(distinct s.section_id) as sections,
    count(e.enroll_date) as students
from
   section s
       inner join
   enrollment e
       on s.section_id = e.section_id
group by
    s.location
order by
    s.location;

内部部分と外部部分の間に相関関係がないため、既存の基準はおそらく期待どおりに機能していません。s.section_id = e.section_idjoin 句と where 句でも繰り返しました。

于 2013-10-30T23:51:22.150 に答える
1

私の最初の考えは、あなたは明確なキーワードが欲しいということです...

このような:

 SELECT s.LOCATION,
        COUNT(DISTINCT s.SECTION_ID) AS SECTIONS, 
        COUNT(e.ENROLL_DATE) AS STUDENTS
 FROM SECTION s
 JOIN ENROLLMENT e
 ON s.SECTION_ID = e.SECTION_ID
 WHERE EXISTS (    
           SELECT SECTION_ID
           FROM SECTION
            MINUS
           SELECT SECTION_ID
           FROM ENROLLMENT    
            )
 AND s.SECTION_ID = e.SECTION_ID
 GROUP BY s.LOCATION
 ORDER BY s.LOCATION;
于 2013-10-30T23:51:01.053 に答える