次のようなユーザーを含むテーブルがあります。
user_id | status
----------------
1 | 1
2 | 2
3 | 1
4 | 1
注文を含むテーブル
order_id | user_id | status
---------------------------
1 | 1 | 1
2 | 2 | 1
3 | 2 | 2
4 | 2 | 1
5 | 3 | 1
および注文商品を含むテーブル
order_id | cash
----------------
1 | 10
1 | 20
1 | 10
2 | 10
3 | 10
3 | 10
選択する必要があるのは、status=1 で注文が 1 つだけあるすべてのユーザーで、その注文は status=1 で、その注文のすべての製品の合計が >=30 である必要があります。
したがって、上記のデータクエリでは、id=1 のユーザーのみを返す必要があります
私はselectプロシージャを書くことができましたが、それは速く動作していません:
SELECT user_id
FROM users US
WHERE status = 1
AND (SELECT Count(*)
FROM orders ORD
WHERE ORD.user_id = US.user_id) = 1
AND (SELECT Count(*)
FROM orders ORD
WHERE ORD.user_id = US.user_id
AND ORD.status = 1) = 1
AND (SELECT Sum(PRO.cash)
FROM products PRO
JOIN orders ORD
ON PRO.order_id = ORD.order_id
WHERE ORD.user_id = US.user_id) > 30
これを少し改善して、内部選択をあまり使用する必要がないようにしたいと思います