SQL WHERE abc = n返回错误的数据

时间:2013-07-24 07:34:19

标签: mysql sql where

所以我试图根据以下命令找到行数:

SELECT COUNT( DISTINCT  `increment_id` ) 
FROM  `orders` 
WHERE  `created_at` LIKE  '%2013-07%'
AND  `store_id` =1
AND  `status` NOT LIKE  '%canceled%'

这会返回一个数字,比如x

SELECT COUNT( DISTINCT  `increment_id` ) 
FROM  `orders` 
WHERE  `created_at` LIKE  '%2013-07%'
AND  `status` NOT LIKE  '%canceled%'

这也会返回一个数字x,这是错误的。在情况1中,数字应小于情况2,因为我正在过滤更多行。

store_id的类型为tinyint(4)

我的查询错了吗?我如何使其工作,因为我希望它工作?

PS:我已手动检查,数字必须低。这些数据没有任何偏差。并非所有记录都有store_id = 1。

1 个答案:

答案 0 :(得分:1)

仅仅因为并非所有行都具有相同的store_id 而不是 意味着这些结果应该是不同的。例如,如果您的increment_id有三条记录store_id=1store_id=14store_id=99,则会显示在您的所有查询中。

尝试此查询以查看示例...

SELECT
  `increment_id`,
  SUM(CASE WHEN `store_id` = 1 THEN 1 ELSE 0 END)  `count_of_store_id_1`,
  SUM(CASE WHEN `store_id` = 1 THEN 0 ELSE 1 END)  `count_of_store_id_not_1`
FROM
  `orders` 
WHERE
      `created_at`     LIKE '%2013-07%'
  AND `status`     NOT LIKE '%canceled%'
GROUP BY
  `increment_id`

我怀疑您会看到 每个 increment_id 至少 一条记录{ {1}}