小编典典

如何根据SQL查询本身将SQL查询中的ORDER BY设置为一个值?

sql

想象一下拍卖(例如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在查询中添加一个子句。问题是,但是,我们希望ORDER BY 无论是
通过auctions.auction_startPrice 通过bid_price,取决于 两者的这种较高 ,如在第一段落解释。

可以理解吗?我知道如何使用2个查询来执行此操作,但我希望可以通过1个查询来完成。

谢谢!

编辑:只是进一步的解释,以帮助您想象问题。如果设置ORDER BY auction_startPrice ASC,那么我将以最低的最低竞标价格获得5个拍卖,但是如果已经对这些拍卖进行​​了投标该怎么办?那么,它们当前的最低价格等于这些出价,而不是起始价格,因此我的查询是错误的。


阅读 176

收藏
2021-04-22

共1个答案

小编典典

SELECT
  `auction_id`,
  `auction_startPrice`,
  `bid_price`
FROM
(
    SELECT
        `auction_id`,
        `auction_startPrice`,
        MAX(bids.bid_price) as `bid_price`,
        IF(MAX(bids.bid_price)>`auction_startPrice`,
           MAX(bids.bid_price),
           `auction_startPrice`) higherPrice
    FROM
    `auctions`
    LEFT JOIN `bids` ON `auctions`.`auction_id`=`bids`.`bid_belongs_to_auction`
    GROUP BY `auction_id`
) X
order by higherPrice desc
LIMIT 5;

笔记:

  1. 在内部查询中,创建了一个额外的列,名为“ higherPrice”
  2. IF函数将MAX(bid_price)列与进行比较startprice,并且仅当Max-bid不为null(比较中隐含要求)且大于开始价格时,Max-bid才成为higherPrice列中的值。否则,它将包含起始价格。
  3. 外部查询仅使用内部查询中的列,按 higherPrice
2021-04-22