2013-07-24 4 views
0

Так что я пытаюсь найти количество строк в соответствии со следующей командой:SQL WHERE ABC = п возвращает неверные данные

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

проверить данные таблицы если все 'store_id' = 1 или нет для условия' created_at' LIKE '% 2013-07%' И 'status' NOT LIKE '% cancel%' –

+0

Как я уже сказал, я проверяю d данных. Th запрос работает, когда 'store_id = 14' или любой другой' store_id' у нас есть. Но не для '1' –

+0

может быть во всех ваших записях' store_id' = 1 –

ответ

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 имеет по крайней мере одна запись, где store_id = 1

+0

. Значит, каждый 'increment_id' имеет по крайней мере в строке, где' store_id' = 1? Потому что это определенно не так. Или, может быть, я недопонимаю. –

+0

Я не могу ответить, понимаете ли вы это. Но пример запроса скажет вам, для каждого increment_id, есть ли строки для store_id = 1 или нет. – MatBailie

+0

Да, я нашел проблему и исправил ее! Ваш запрос спас меня. :) –

Смежные вопросы