0

こんにちは、これは私の出力形式です:

--------------------------------------------------------------------------------
    CLASS   TOTAL NO OF STUDENTS    STUDENTS PURCHASED    REMAINING STUDENTS
    1A         52                      26                    26
  1. ここで、「student_table」には学生 ID とクラスが含まれています。
  2. 「purchase_table」には、ドレスを購入した生徒の ID が含まれています。

今、私は上記の形式で結果を求めています(クラス「1A」に属する学生の数と、購入した学生と購入していない学生の数)。

私はこのクエリを使用しますが、学生の結果を購入しないだけです。

select count(studentid)
  from student_table
 where studentid not exists (select studentid from 'purchase_table')
     ;

誰でもこの問題を解決するのに役立ちます。

4

2 に答える 2

0

これを試してください:

   select st.class                                  class
        , st.cnt_tl                                 total
        , coalesce(sp.cnt_customer,0)               customers
        , st.cnt_tl - coalesce(sp.cnt_customer,0)   remaining
     from (
                select s1.class
                     , count(*) cnt_tl
                  from student_table s1
              group by s1.class
          ) st
left join ( 
                select s2.class
                     , count(*)     cnt_customer
                  from student_table  s2
            inner join purchase_table p on ( p.studentid = s2.studentid )
              group by s2.class
          ) sp
       on ( sp.class = st.class )
     ;

ライブ デモ (sqlfiddle)はこちら(oracle 11g r2)です。

于 2013-05-07T11:44:43.893 に答える
0

試す

SELECT class,
       COUNT(*) total,
       COUNT(p.studentid) purchased,
       COUNT(*) - COUNT(p.studentid) remaining
  FROM student_table s LEFT JOIN
       purchase_table p ON s.studentid = p.studentid
 WHERE s.class = '1A'
GROUP BY class;

SQLフィドル(MySQL)

SQLFiddle (SQLServer)

于 2013-05-07T11:22:33.597 に答える