2013-04-23 34 views
0

我有插入它下面的列和值創造了這個簡單的庫結算表計數:SQLPLUS選擇一列,並在同一SELECT語句中

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

戈登給你一個正確的答案。你不知道的部分非常重要。既然如此,我已經聽說過這本書的好處,在10分鐘內教你自己的SQL。 – 2013-04-23 16:04:55

回答

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。你應該做一些學習,以更好地理解語言。

+0

非常感謝Gordon的幫助!我還需要列出那些從未簽出過書籍的成員姓名(他們的ID和姓名存儲在名爲Member的單獨表中,ID是結帳MemID的PK)。功能是否也是功能組的一部分,或者是否有一個不同的功能可用於解決這個問題? – Rekson 2013-04-23 16:34:27

相關問題