MYSQL - COUNT()NULL值

时间:2015-12-12 20:04:36

标签: mysql

这一直是我的头脑。我已经浏览了互联网(包括这个地方)并找不到解决方案。所以作为最后的手段,我希望这个论坛的好人能够帮助我。

我有两张桌子:

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'中减去它。

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

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//

如果有一个或多个TitleID处于NULL状态,则此方法有效;但是如果没有值为NULL,则Count()在值应为0时仍返回值。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

而不是:

COUNT(TableA.return_date IS NULL)

使用它:

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. 中没有匹配记录时
  3. 如果有匹配的记录,但此确切记录的TableA.return_date值为NULL
  4. 使用CASE表达式可以区分这两种情况。

答案 1 :(得分:0)

我想在这里提一个简单的概念,只要在特定列为null时继续计算行数。

select count(*) from table_name where column_name is null