所以我试图根据以下命令找到行数:
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。
答案 0 :(得分:1)
仅仅因为并非所有行都具有相同的store_id
而不是 意味着这些结果应该是不同的。例如,如果您的increment_id
有三条记录store_id=1
,store_id=14
和store_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}}