私はこの問題をあまりにも長い間見つめてきたと思います。システムのメンテナンスを引き継ぎ、レポートの 1 つを修正しようとしています。なんらかの理由で、このレポートの 1 つを除いてすべての数字が正しいのですが、私はこの問題をうまく処理できません。
次のクエリは、データベースに 1014 のトランザクションがあることを示しています。
SELECT COUNT(DISTINCT(store_orders_id))
FROM transactions, store_orders_products
WHERE store_orders_products.store_orders_id = transactions.id
AND transactions.date >= '2013-10-01 00:00:00'
AND transactions.date <= '2013-10-31 23:59:59'
AND store_orders_products.category_name <> ''
store_orders_products には、注文された製品ごとに 1 つの行が含まれるため、DISTINCT() 呼び出しが必要です。複数の製品を含む注文の場合、store_orders_id が重複します。上記のクエリは正しい結果を生成します。実際、これらの日付の間に 1014 のトランザクションがあります。
ここが問題です。完全なレポート クエリを実行すると、返される合計は 1030 です。
SELECT COUNT(DISTINCT(store_orders_id)) as transactions,
SUM(store_orders_products.total + store_orders_products.coupon) as total,
SUM(store_orders_products.coupon) as coupon,
SUM(store_orders_products.shipping) as shipping,
SUM(store_orders_products.tax) as tax, store_orders_products.category_name
FROM transactions, store_orders_products
WHERE store_orders_products.store_orders_id = transactions.id
AND transactions.date >= '2013-10-01 00:00:00'
AND transactions.date <= '2013-10-31 23:59:59'
AND store_orders_products.category_name <> ''
GROUP BY store_orders_products.category_name
ORDER BY store_orders_products.category_name ASC
これにより、次のようなレポートが生成されます。
Transactions | Total | Coupon | Shipping | Tax | Category Name
483 | 17863.15 | 0.00 | 1493.50 | 260.56 | Category 1
547 | 21541.47 | 0.00 | 1594.80 | 194.03 | Category 2
ご覧のとおり、これらのトランザクションの合計は 1030 であり、予想される 1014 ではありません。
この問題は、選択した 2 番目の列を追加するだけで発生するようです。たとえば、上記の最初のクエリ ブロックを からSELECT COUNT(DISTINCT(store_orders_id))
に変更するとSELECT COUNT(DISTINCT(store_orders_id)), store_orders_products.category_name
、1014 件の結果から 1030 件の結果にジャンプします。
役に立つ十分な情報を提供できたことを願っています。これはクエリの問題だと思いますが、私が言ったように、私たちはこのプロジェクトを引き継いだばかりで、まだ慣れてきているので、今は何もゼロから書き直さないようにしています。