2014-08-27 58 views
0

我正在研究一个用于拍卖的数据库,我想获取所有中标竞标的编号。困难的部分是从返回2列的子查询中提取它:id和金额。 它看起来像这样: SELECT id FROM Bid WHERE id IN (Select ID,max(amount) FROM Bid group by bid.idAuction)SQL - 子查询中的提取列

我可以以某种方式从子查询中提取一列吗?执行此任务的任何其他建议也是有帮助的。

谢谢!

+0

你可以分享一些数据集,你希望看到什么?是否有最大值出现的可能性超过一次?什么是数据库引擎? – SriniV 2014-08-27 16:17:50

+0

那么,为什么使用子查询...使用内联查询和联接,而不是... – xQbert 2014-08-27 16:19:03

回答

2

您所查询的是接近的,但你需要一个相关子查询,使这项工作:

SELECT b.id 
FROM Bid b 
WHERE b.amount = (SELECT max(amount) 
        FROM Bid b2 
        WHERE b2.idAuction = b.idAuction 
       ); 
+0

这正是查询我一直在寻找,非常感谢你! – 2014-08-27 19:50:43

1
SELECT id, maxBid.MAmount, Bid.Amount 
FROM Bid 
INNER JOIN (Select ID,max(amount) mamount FROM Bid group by bid.idAuction) MaxBid 
on MaxBid.ID = Bid.ID 

RDBMS和SQL在基于SET的操作中最有效地运行。因此,在这种情况下,我们会根据ID和最高出价生成一个集合。然后,我们将它加入基本集,以便只有最高出价才能获得。

+0

您的建议让我到另一个可行的解决方案 'SELECT b1.id,b1.Amount FROM Bid b1 INNER JOIN(Select b2 .idAuction as“Auc”,max(b2.amount)as“MAmount”FROM Bid b2 group by b2.idAuction)MaxBid on(MaxBid.MAmount = b1.Amount and b1.idAuction = MaxBid.Auc)' 诀窍!感谢您的帮助。对不起,我不能投票,但我没有15代表:( – 2014-08-27 20:01:09

+0

从两个答案我认为第一个是更容易一点,但我现在更好地了解这个内部加入集。 – 2014-08-27 20:04:52