当前位置: 首页 > 面试题库 >

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

劳鹏云
2023-03-14
问题内容

想象一下拍卖(例如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个拍卖,但是如果已经对这些拍卖进行​​了投标该怎么办?那么,它们当前的最低价格等于这些出价,而不是起始价格,因此我的查询是错误的。


问题答案:
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


 类似资料:
  • 问题内容: 如何合并这两个SQL语句? 两个表中都存在hits10,hits11和hits12。 问题答案: 使用UNION查询-只需在两个查询之间填入“ UNION”即可: 更新 将联合包装在另一个查询中:

  • 我想在JPA 2.1中将“命名查询”转换为“SQL查询”,并在运行之前对其进行更改。 例如,我有一个命名查询:从CU所在的客户中选择CU。代码=?1,我希望在PAR之后获得查询并对其进行转换和编辑(例如添加模式名称)并创建此查询:从db1.cc1cust cu中选择*其中cu.cc1cod=?1. 我该怎么做? 问候

  • 问题内容: 我想将以下SQL查询转换为Elasticsearch之一。谁能帮上忙 我尝试了以下方法: 但不确定我是否做对了,因为它无法验证结果。似乎要在聚合内添加查询。 问题答案: 假设您使用Elasticsearch 2.x,则有可能在Elasticsearch中 具有 -semantics。我不知道2.0之前的可能性。 您可以使用新的Pipeline Aggregation Bucket Se

  • 我使用注释和注释执行查询,并从数据库表中删除记录。 错误: xxx的例外。xxx。xx,原因='javax。坚持不懈TransactionRequiredException:执行更新/删除查询“和异常=”执行更新/删除查询;嵌套的异常是javax。坚持不懈TransactionRequiredException:执行更新/删除查询'

  • 问题内容: 我的最后一篇文章是关于在LEFT OUTER JOIN上编写带有条件的SQL查询的最佳方法: LEFT OUTER JOIN带有条件(在哪里排序)? 现在,我需要将该段好的SQL转换成一个不错的Active Record查询(Rails 3)。;-) 我有2个型号: 培训 has_many:training_histories TrainingHistory 所属类别:培训 如何编写范

  • 我有两个查询,它们都是分开工作的,但是当我尝试统一下摆时,我只有问题。 查询1: 查询 2: 如何根据(内部一)统一它们?

  • 我现在在大学学习数据库,在我的项目中,我有3个表:、和 联赛(leagueId,leagueName) 团队(teamId,teamName) 具有(leagueId,teamId,year)

  • 问题内容: 多亏了Erwin Brandstetter在我之前的问题“具有has_many关系的订单”中的帮助,我的SQL查询才能正常工作。 如何将该SQL转换为ActiveRecords或AREL查询以在范围中使用? 我最近来的是在朋友的帮助下… …这给了我一个错误: 更新: 我之前的问题对相关的架构和查询有完整的描述。但是基本上Articles have_many Metrics和一个Metr