计数子句中的 SQL CASE 语句

标签 sql join count case

我正在尝试从两个单独的表中获取产品名称及其销售数量。

我的表看起来像这样:

BOOK
Book_ID | Book_Title | Book_Author  

SOLD  
Transaction_ID | Book_ID | Customer_ID  

我可以从以下查询中获得我想要的大部分结果
SELECT b.Book_Title, COUNT(s.Book_ID) FROM Book b, Sold s 
WHERE b.Book_ID = s.Book_ID 
GROUP BY b.Book_Title;

但是,这仅显示至少有一次销售的产品。我想显示所有产品,如果没有发生销售,则只显示零。我一直在搞这样的事情:
SELECT b.Book_Title, 
       COUNT(CASE WHEN s.Book_ID IS NULL THEN 0 ELSE s.Book_ID END) 
FROM Book b, Sold s WHERE b.Book_ID = s.Book_ID GROUP BY Book_Title;

但是WHERE条款将结果限制为具有 1 个或多个销售额的结果。

任何人都可以提出解决这个问题的方法吗?我正在使用 Oracle 10g。

谢谢

最佳答案

使用左外连接:

SELECT b.Book_Title, COUNT(s.Book_ID) 
FROM Book b left outer join Sold s on b.Book_ID = s.Book_ID 
GROUP BY b.Book_Title;

关于计数子句中的 SQL CASE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/795341/

相关文章:

sql - 如何使用另一个表中的所有记录作为计数列?

c++ - Visual C++,CMap 对象保存到 blob 列

mysql - 连接两个表并按单列排序

mysql - 查询显示故障率%

ruby-on-rails - Rails 为具有多对多关系的模型创建表单

php - 统计某列的内容并显示总计

Mysql group by 计数有不同的逻辑

javascript - 在 PHP 中执行指定时间范围内的操作

sql - Postgres 触发器 : write old record to new table

php - 从 mysql 读取和使用十进制数据类型时的数学问题