我需要编写一个应该执行以下操作的查询:
涉及三个实体让我们说A,B,C
,我必须找到C的列表
sum(C.noOfOrders) < B.maxNoOfOrders where A.BID = B.ID and B.ID = C.BID and A.RunId = C.RunId
注意:sum(C.noOfOrders)
表示C结果中noOfOrders的总和应小于B.maxNoOfOrders。
请向我提出解释说明。
以下示例数据:
ID | RunId | BID
------------------
100 | 1001 | 100
200 | 1002 | 200
300 | 1003 | 300
400 | 1004 | 400
ID | maxNoOfOrders
-----------------------
100 | 50
200 | 10
300 | 50
400 | 15
Id | RunId | BID | noOfOrders
-----------------------------------
101 | 1001 | 100 | 10
102 | 1001 | 100 | 10
103 | 1003 | 200 | 20
104 | 1004 | 300 | 50
200 | 1001 | 100 | 10
201 | 2002 | 100 | 10
300 | 3001 | 200 | 50
401 | 4001 | 300 | 5
402 | 4002 | 400 | 10
这应返回ID为101,102和200的C列表,因为(10 + 10 + 10)&lt; 50
答案 0 :(得分:1)
您需要使用GROUP BY
和HAVING
条款:
SELECT C.Id
FROM C
JOIN B ON B.ID = C.BID
JOIN A ON A.BID = B.ID AND A.RunId = C.RunId
GROUP BY C.Id
HAVING sum(C.noOfOrders) < B.maxNoOfOrders