COUNT 子句中的 SQL 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。
谢谢
I'm trying to get a product's name and its number of sales from two separate tables.
My tables look something like this:
BOOK
Book_ID | Book_Title | Book_Author
SOLD
Transaction_ID | Book_ID | Customer_ID
I can get most of the results I want from the following query
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;
However, this only displays products with at least one sale. I would like to display all products, simply showing a zero if no sales have occurred. I've been messing around with something like this:
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;
But the WHERE
clause is limiting the results to the ones with 1 or more sales.
Can anyone suggest a way around this? I am using Oracle 10g.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
使用左外连接:
use a left outer join:
您还可以在
select
子句中使用相关子查询:它不需要
group by
或outer join
,这可能会很慢对于非常多的行。You can also use a correlated subquery in the
select
clause :It doesn't need either
group by
orouter join
s, which can be slow for very large number of rows.正如@Vincent 所说,你需要一个外部联接。 我最近没有太多使用 Oracle,但它专有的外连接语法相当奇怪。 (我不知道他们是否在这方面赶上了 ANSI。)
专有语法是:
As @Vincent said, you need an outer join. I haven't worked much with Oracle lately, but its proprietary outer join syntax is rather bizarre. (I don't know whether they've caught up with ANSI on that.)
The proprietary syntax is:
您应该在子查询中获取计数并对其进行左外连接,如下所示:
You should get the count in a subquery and left outer join to it as such:
从书籍到销售进行其他连接。
您可能仍然会得到一个空计数,但您可以通过在其上添加 NVL 来解决这个问题...
make an other join from book to sold.
you may still get a null for the count, but you resolve that by adding a NVL on top of that...