使用比较运算符时计数不正确

时间:2014-07-22 19:54:53

标签: mysql sql comparison-operators

我在一个表中有39条记录,其中包含以下查询

SELECT COUNT(`id`) FROM `table` WHERE `status` = 1

现在我希望在某个最大十进制值为X

时计算结果
SELECT COUNT(`id`) FROM `table` WHERE `status` = 1 AND `price` <= 247504.91

在这种特殊情况下, 247504.91 是该表的最高价格值

第一个查询返回39,但第二个返回38,似乎它排除了最后一条记录,或者我不确定,但我现在有点陷入困境,为什么会发生这种情况?我做错了什么?。

修改

价格字段的数据类型是十进制

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您的某个价格值为NULL,则算术运算符不会对它们起作用,因此它们将不会被考虑在总记录数中。使用以下查询为每个null值

输入值0
UPDATE `table` SET `price` = 0 WHERE `price` IS NULL

避免使用硬编码值

此外,对于写这样的查询,你应该有一个嵌套查询来获取列的最大值,而不是使用硬编码的数字。这样,如果最大更改,您不必返回并更新查询,加上它不会出现人为错误(输入错误的数字)。

SELECT COUNT(`id`) FROM `table` WHERE `status` = 1 AND `price` <= 
(SELECT MAX(`price`) FROM `table` WHERE `status` = 1)