SQLPLUS在同一SELECT语句中选择一个列和计数

时间:2013-04-23 15:51:39

标签: sql oracle select count sqlplus

我创建了这个简单的库检出表,其中插入了以下列和值:

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; 

但收到错误:不是单组组功能。显然我无法选择同时显示的列和计数,但我可能是错的。有什么想法吗?

1 个答案:

答案 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。你应该做一些学习以更好地理解这门语言。