このような3つのテーブルを含む問題があります(重要なフィールドのみを表示します):
テーブルの順序:
id
date
各注文には、より多くの行を含めることができます。
テーブルOrderRows:
id
order_id
article_id
quantity
quantity_evaded
quantity_available
注文リストテーブルで、このようなクエリを実行して、注文のすべての値を要約します
SELECT o.*,
SUM(r.quantity) quantity, SUM(r.quantity_evaded) evaded,
SUM(r.quantity_available) available
FROM `Orders` AS `o`
LEFT JOIN `OrderRows` as `r` ON `r`.`order_id`=`o`.`id`
GROUP BY `o`.`id`
問題は、このクエリでは、注文を閉じることができるかどうかについて何も教えてくれないことです。注文は、その中のすべての記事が各行に十分な可用性を持っているときに閉じることができます。記事Aと記事Bの2つの記事が含まれている注文があり、それぞれが5個の数量で注文されており、在庫状況はAが10、Bが2である場合を考えてみましょう。
在庫状況の合計は12(10 + 2)で、注文数量の10を超えていますが、商品Bに十分なアイテムがありません(注文された5つのうち2つのみ)。特定の最大値にカウントする方法で合計を作成する方法はありますか、または私が持っている唯一の方法は、注文のすべての行を循環させ、すべての単一の行に十分な可用性があるかどうかを確認することです?
集計関数を適用する前に、比較を行う必要があります。
SELECT o.*,
SUM(r.quantity) as quantity,
SUM(r.quantity_evaded) as evaded,
SUM(r.quantity_available) as available,
NOT MAX( r.quantity > r.quantity_available ) as is_closed
FROM `Orders` `o` LEFT JOIN
`OrderRows` `r`
ON `r`.`order_id` = `o`.`id`
GROUP BY o.id;
注文を閉じることができない場合、式r.quantity > r.quantity_available
が返さ1
れます。MAX()
かどうかが決定どの記事がこの基準を満たします。
注:これは、記事が注文内で重複していないことを前提としています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加