我创建了这个简单的库检出表,其中插入了以下列和值:
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;
但收到错误:不是单组组功能。显然我无法选择同时显示的列和计数,但我可能是错的。有什么想法吗?
答案 0 :(得分: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。你应该做一些学习以更好地理解这门语言。