0

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

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_idtinyint(4)

我的查询错了吗?我如何让它像我想要的那样工作?

PS:我已经手动检查过,数字一定很低。数据没有任何偏差。并非所有记录都有store_id=1。

4

1 回答 1

1

仅仅因为并非所有行都相同store_id并不意味着这些结果应该不同。例如,如果您有一个包含三个带有and的记录,它将出现在您的所有查询中。increment_idstore_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一个记录在哪里store_id = 1

于 2013-07-24T07:54:58.397 回答