0

次の列と値を挿入して、この単純なライブラリ チェックアウト テーブルを作成しました。

insert into CHECKOUT (MemID, Cat#, DateChkOut, DateDue, DateRet) 
    values (4, 'T 430.98 1956', '15-Mar-2011', '14-Jun-2011', '31-May-2011');
insert into CHECKOUT (MemID, Cat#, DateChkOut, DateDue, DateRet) 
    values (12, 'B 125.2 2013', '15-Mar-2011', '14-Jun-2011', NULL);
insert into CHECKOUT (MemID, Cat#, DateChkOut, DateDue, DateRet) 
    values (4, 'T 430.98 1956', '27-Dec-2012', '25-Mar-2013', NULL);

メンバーごとに、メンバー ID とこれまでにチェックアウトした本の数をリストする必要があります。私は使用してみました:

select distinct MemID, count(distinct Cat#) from CHECKOUT; 

しかし、エラーを受け取ります: 単一グループのグループ関数ではありません。表示する列とカウントを同時に選択することはできないようですが、間違っている可能性があります。何か案は?

4

1 に答える 1

2

group byではなく、ステートメントが必要ですselect distinct

select MemID, count(distinct Cat#)
from CHECKOUT
group by MemId

本をチェックアウトしたことのないメンバーが必要な場合は、次のものが必要ですleft outer join

select memID, count(distinct Cat#)
from Members m left outer join
     Checkout co
group by m.MemId

の背後にある考え方left outer joinは、すべての行を最初のテーブルに保持し、一致した行を 2 番目のテーブルに保持することです。これにより、一致する行がないメンバーを見つけることができます。

SQLを学んでいるようです。その言語をよりよく理解するために、いくらか勉強する必要があります。

于 2013-04-23T15:53:18.763 に答える