【发布时间】:2011-07-23 18:35:07
【问题描述】:
想象一下拍卖(例如,ebay 拍卖)。您创建一个拍卖,设置起始出价值,比如说 5 美元。这将作为最低出价值存储到auctions 表中。此时,此拍卖的当前出价值为5 美元。
现在,如果有人对您的拍卖出价,比如 10 美元,这将存储到 bids 表中。此时,此拍卖的当前出价值为 10 美元。
现在让我们假设您要检索 5 个最便宜的拍卖。您将编写如下查询:
SELECT
`auction_id`,
`auction_startPrice`,
MAX(bids.bid_price) as `bid_price`
FROM
`auctions`
LEFT JOIN `bids` ON `auctions`.`auction_id`=`bids`.`bid_belongs_to_auction`
GROUP BY `auction_id`
LIMIT 5
很简单,而且很有效!但是现在您需要在查询中添加一个ORDER BY 子句。然而,问题是,我们希望通过auctions.auction_startPrice 或 通过ORDER BY 要么 bid_price,这取决于哪个更高 strong>,如第一段所述。
这可以理解吗?我知道如何使用 2 个查询来做到这一点,但我希望它可以用 1 个查询来完成。
谢谢!
编辑:只是进一步解释以帮助您想象问题。如果我设置ORDER BY auction_startPrice ASC,那么我将获得 5 个最低初始出价的拍卖,但是如果这些拍卖已经有出价怎么办?那么他们当前的最低价格等于那些出价,而不是起始价格,因此我的查询是错误的。
【问题讨论】:
-
但是由于bid_price 总是高于或等于auction_startPrice,为什么不直接按bid_price 排序呢? (或 isnull(bidprice,auction_startPrice) 如果还没有任何出价(
-
bid_price 如果还没有出价,则不存在,因此我无法按出价订购,因为在某些情况下它为 NULL
标签: sql