SQL开发人员:添加已售出图书的数量。如果没有售出任何书籍,则必须显示零
我需要展示那些没有销售的书。总共有14本书。我只有11分。我不确定是否需要使用rollup将空值显示为0或其他内容。ISNULL在表中不起作用。下面是我试图得到的结果SQL开发人员:添加已售出图书的数量。如果没有售出任何书籍,则必须显示零,sql,oracle,null,oracle-sqldeveloper,Sql,Oracle,Null,Oracle Sqldeveloper,我需要展示那些没有销售的书。总共有14本书。我只有11分。我不确定是否需要使用rollup将空值显示为0或其他内容。ISNULL在表中不起作用。下面是我试图得到的结果 select b.ISBN , b.TITLE , b.RETAIL , b.COST , round(sum((b.RETAIL- b.COST)/b.COST*100),2)||'%' "Profit Percentage" , count(*) as "Book Cou
select b.ISBN
, b.TITLE
, b.RETAIL
, b.COST
, round(sum((b.RETAIL- b.COST)/b.COST*100),2)||'%' "Profit Percentage"
, count(*) as "Book Count"
from BOOKS b
, ORDERITEMS oi
, ORDERS o
where b.ISBN = oi.ISBN
and oi.ORDER# = o.ORDER#
group by(b.ISBN, b.TITLE, b.RETAIL, b.COST)
;
您的查询不会返回尚未订购的书籍的信息。您正在使用的隐含联接(在
FROM
子句中列出了多个表)用作内部联接,这意味着对于查询返回的任何数据,每本书的数据都必须存在于所有三个表中。如果数据不存在于所有表中,则需要使用外部联接返回数据:
select b.ISBN
, b.TITLE
, b.RETAIL
, b.COST
, round(sum((b.RETAIL- b.COST)/b.COST*100),2)||'%' "Profit Percentage"
, count(*) as "Book Count"
from BOOKS b
LEFT OUTER JOIN ORDERITEMS oi
ON oi.ISBN = b.ISBN
LEFT OUTER JOIN ORDERS o
ON o.ORDER# = oi.ORDER#
group by(b.ISBN, b.TITLE, b.RETAIL, b.COST)