简单的SELECT COUNT SQL查询错误

时间:2014-08-23 18:23:35

标签: mysql sql

我尝试使用此SQL查询获取总行数,结果应为= 1

SELECT COUNT(id) FROM offer_process WHERE uid = 103 AND date = '2014-08-20'

在这种情况下,我并不确切知道如何从日期(2014-08-20)获取行总数。

enter image description here

5 个答案:

答案 0 :(得分:4)

您有一个datetime列 要仅查看date部分,请使用DATE() MySQL function

SELECT COUNT(id) FROM offer_process WHERE uid = 103 AND DATE(date) = '2014-08-20'

此外,如果您的date字段中有索引,则应避免使用DATE/TIME MySQL函数。相反,您可以使用WHERE date LIKE '2014-08-20%'来获得更好的效果

答案 1 :(得分:3)

你可以试试这个:

SELECT COUNT(id) FROM offer_process WHERE uid = 103 
AND DATE_FORMAT(`date`, "%Y-%m-%d") = '2014-08-20'

或者您可以尝试使用日期

SELECT COUNT(id) FROM offer_process
WHERE uid = 103 AND date(`date`) = '2014-08-20'

答案 2 :(得分:3)

您的日期有时间部分。使用日期常量时,将其视为午夜。 MySQL具有函数date()来仅提取日期组件:

SELECT COUNT(id)
FROM offer_process
WHERE uid = 103 AND date(date) = '2014-08-20'

答案 3 :(得分:2)

要利用您在日期字段中可能使用的索引:

select count(id)
  from offer_process
 where date like '2014-08-20%'
   and uid = 103

如果对应用了函数的列使用条件,并且索引位于列本身上,则无法再使用该索引。

IE中。使用

DATE(date) = '2014-08-20'

会导致性能下降。 (如果数据集很大,并且您适当地将该字段编入索引)。

<强>小提琴: http://sqlfiddle.com/#!9/0e62b/3/0

从执行计划中可以看出,在较大的数据集中,对日期字段建立索引,您可以获得性能增益,因为可以依赖索引。如果您的标准不在该字段上,而是在针对该字段应用的函数的结果上,则不能使用日期字段上的索引。

enter image description here

答案 4 :(得分:1)

尝试使用DATE函数仅比较日期组件:

AND DATE(date) = '2014-08-20'