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%'

これも number を返しますがx、これは間違っています。ケース 1 では、より多くの行をフィルタリングしているため、ケース 2 よりも数が少なくなるはずです。

のタイプはstore_idですtinyint(4)

私のクエリは間違っていますか? 動作させたいように動作させるにはどうすればよいですか?

PS: 手動で確認しましたが、数値は低いに違いありません。データに偏りはありません。すべてのレコードにstore_id=1 があるわけではありません。

4

1 に答える 1

1

すべての行が同じstore_idではないからといって、これらの結果が異なるはずではありません。たとえば、andをincrement_id含む 3 つのレコードを持つ がある場合、すべてのクエリに表示されます。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 つのレコードがあることがわかると思います。store_id = 1

于 2013-07-24T07:54:58.397 に答える