gpt4 book ai didi

sql - 使用 SQL(ite) 如何在 JOIN 期间为一对多关系中的每个父级找到最低的唯一子级?

转载 作者:行者123 更新时间:2023-12-03 17:50:53 25 4
gpt4 key购买 nike

我有两个具有多对一关系的表,它们代表拍卖系统中的批次和出价。每个批次可以有零个或多个与之相关的出价。每个出价都与一个批次相关联。

我的表结构(删除了不相关的字段)看起来像这样:

table structure

对于一种类型的拍卖,获胜出价是 给定批次的最低唯一出价 .

例如。如果给定批次有四个出价:[1, 1, 2, 4] 最低的唯一出价是 2(不是 1)。

到目前为止,我已经能够构建一个查询,该查询将找到单个特定批次的最低唯一出价(假设批次 ID 为 123 ):

SELECT id, value FROM bid
WHERE lot = 123
AND amount = (
SELECT value FROM bid
WHERE lot = 123
GROUP BY value HAVING COUNT(*) = 1
ORDER BY value
)

这符合我的预期(尽管我不确定这是最优雅的方法)。

我现在想构建一个查询,该查询将一次获得所有批次的最低唯一出价。基本上我想执行一个 JOIN在两个表中,其中一列是类似于上述查询的结果。我不知道如何使用相同的方法在 JOIN 中找到最低的唯一出价尽管。

使用这种寻找最低唯一出价的方法,我是否走错了路?有没有另一种方法可以达到相同的结果?

谁能帮我将此查询扩展为 JOIN ?

这在 SQL 中甚至是可能的,还是我必须在我的应用程序中正确执行?

提前致谢。

(我使用的是 Android 2.1 中的 SQLite 3.5.9)

最佳答案

您可以使用带有“具有”条件的 group by 来查找每批没有重复金额的一组投标。

          select lotname, amt
from lot inner join bid on lot.id = bid.lotid
group by lotname, amt having count(*) = 1

您可以反过来使该查询成为内嵌 View ,并从中为每个批次选择最低出价。
select lotname, min(amt)
from
(
select lotname, amt
from lot inner join bid on lot.id = bid.lotid
group by lotname, amt having count(*) = 1
) as X

group by X.lotname

编辑:以下是使用嵌套内联 View 使用此方法获取出价 ID 的方法:
 select bid.id as WinningBidId, Y.lotname,  bid.amt
from
bid
join
(
select x.lotid, lotname, min(amt) as TheMinAmt
from
(
select lot.id as lotid, lotname, amt
from lot inner join bid on lot.id = bid.lotid
group by lot.id, lotname, amt
having count(*)=1
) as X

group by x.lotid, x.lotname
) as Y
on Y.lotid = bid.lotid and Y.TheMinAmt = Bid.amt

关于sql - 使用 SQL(ite) 如何在 JOIN 期间为一对多关系中的每个父级找到最低的唯一子级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5640483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com