Это ломает голову. Я прочесываю интернет (включая это место) и не могу найти решение. Поэтому, в крайнем случае, я надеялся, что хорошие люди этого форума смогут мне помочь.MYSQL - COUNT() NULL Значения
У меня есть две таблицы:
TableA
Order_detailsID
OrderID
TitleID
Return_date
TableB
TitleID
Title_name
Quantity_in_stock
И хотел бы выполнить запрос, который показывает оставшееся «Quantity_in_stock».
Если для параметра «Return_date» установлено значение NULL, это означает, что элемент в данный момент отсутствует, поэтому я пытаюсь использовать функцию count() для значений NULL и вычитать ее из «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//
Это работает, если есть один из нескольких TitleIDs в NULL, однако, если нет значения в NULL, то Count() по-прежнему возвращая значение 1, когда оно должно быть 0.
Что я делаю неправильно?
Благодарим за быстрый ответ. Это работает с идентификаторами TitleID, которые вообще не отображаются в TableA. Однако идентификаторы TitleID, которые появляются в TableA, но имеют не-NULL return_date (дата), все еще подсчитываются. Я хочу только вычесть значения NULL из количества. – Gary866
@ Gary866 Пожалуйста, проверьте внесенные изменения. –
Еще раз оцените помощь, но я боюсь, что у меня все еще возникают две проблемы: 1) Если TitleID вообще не отображается в TableA, он все равно подсчитывает его один раз и вычитает 1 из TableB.Quantity_in_stock. 2) Если TitleID появляется в таблице A с не-NULL return_date, то он также подсчитывает их. – Gary866