在算术表达式中使用oracle中count(*)的结果

时间:2012-12-24 07:06:01

标签: sql oracle oracle10g

有一个简单的问题,我坚持并需要一些帮助。

我在Oracle 10g中有两个不同的表,称为BOOK_DETAILS(主键 - book_code)和BOOK_ISSUE(外键和主键 - book_code)。 BOOK_ISSUE表格还有一个名为BOOK_ISSUE_STATUS的列,其中包含“y”或“n”值,具体取决于是否发行了该图书。

现在我必须进行以下简单查询 - 找出图书馆中可用的图书数量(即可用图书总数 - 已发行的图书数量)。

所以我尝试了以下查询: -

 select count(b.book_code)-count(i.book_code)
 from 
 lms_book_issue i, lms_book_details b
 where
 i.book_issue_status='Y'
 ;

但显然我没有得到理想的结果。我的逻辑是从计算BOOK_ISSUE表中的书籍数量的结果中减去已发出的书籍数量(我从BOOK_DETAILS表中获得)的结果。

请告诉我哪里出错了。而且上面的查询只是给出0作为结果。所以对此的解释也将受到高度赞赏。

2 个答案:

答案 0 :(得分:3)

您可以通过以下方式获取(图书总数 - 状态为“Y”的图书):

select 
          (select count(book_code) from BOOK_DETAILS) - 
          (select count(book_code) from BOOK_ISSUE where book_issue_status='Y')
from dual

答案 1 :(得分:0)

这是一个基本错误,count(col)使用非空值获取查询中的行数。

你得到0只是因为2个计数给了相同的数字。

在这种情况下,您甚至没有将“i.book_code = b.book_code”加入2个表

但即使它会让你回归0,

以您的方式,正确的选择是:

select 
    count(b.book_code) - count(i.book_code)
from 
    lms_book_issue i, lms_book_details b
where
    b.book_code = i.book_code(+) AND
    i.book_issue_status = 'Y'
;

通过这种方式,您选择了所有书籍和书籍,并且仅与问题选项卡一起加入了具有问题= Y的行,因此第一个计数将为您提供书籍数量,第二个计数将仅计算已发布的书籍,因为其余的将是NULL并且不计算在内。