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是保留第一个表中的所有行,以及第二个表中的匹配项。这允许您查找没有匹配行的成员。

看来您正在学习 SQL。你应该做一些学习来更好地理解语言。

于 2013-04-23T15:53:18.763 回答