首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL - COUNT()空值

MYSQL - COUNT()空值
EN

Stack Overflow用户
提问于 2015-12-12 20:04:35
回答 2查看 3.5K关注 0票数 3

这件事一直困扰着我。我在互联网上搜索过(包括这个地方),找不到解决办法。因此,作为最后的手段,我希望这个论坛的好人能够帮助我。

我有两张桌子:

代码语言:javascript
复制
TableA
Order_detailsID 
OrderID
TitleID
Return_date

TableB
TitleID
Title_name
Quantity_in_stock

并希望运行一个查询,以显示剩余的'Quantity_in_stock‘。

如果'Return_date‘设置为NULL,那么它就意味着该项当前已退出--因此我一直试图对NULL值使用count()函数,并从'Quantity_in_stock’中减去它。

到目前为止,这就是我的脚本:

代码语言:javascript
复制
DELIMITER //
 CREATE PROCEDURE InStock()
BEGIN

Select TableB.TitleID,
TableB.Title_name,
TableB.Quantity_in_stock AS 'Total_Stock',
COUNT(TableA.return_date IS NULL) AS 'Rented_Out',
TableB.Quantity_in_stock - COUNT(TableA.return_date IS NULL) AS 'Remaining Stock'
From TableB
LEFT JOIN TableA
ON TableA.TitleID = TableB.TitleID
GROUP BY TableB.TitleID;

END//

如果在NULL处有多个TitleID中的一个,那么如果在NULL中没有值,Count()仍然返回值为1,而这个值应该是0。

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-12 20:11:32

而不是:

代码语言:javascript
复制
COUNT(TableA.return_date IS NULL)

用这个:

代码语言:javascript
复制
SUM(CASE 
        WHEN TableA.TitleID IS NULL THEN 0
        WHEN TableA.return_date IS NOT NULL THEN 0
        ELSE 1
      END)

TableA.return_date IS NULL谓词的问题是,它在两种完全不同的情况下是正确的:

  1. TableA中没有匹配记录时
  2. 如果有一个匹配的记录,但是这个精确记录的TableA.return_date值是NULL

使用CASE表达式,您可以区分这两种情况。

票数 3
EN

Stack Overflow用户

发布于 2015-12-12 21:47:19

我想在这里提到一个简单的概念,当特定的列是null时,请继续计算行数。

代码语言:javascript
复制
select count(*) from table_name where column_name is null
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34244376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档