在MySQL中选择MIN值后的SELECT MIN(MAX)

德米特里

我有两个表格:项目价格(一对多)

每个项目都有默认价格,但是此价格可以在第二个表中覆盖(在某些情况下)。

首先,我遇到了一个问题,即要提取所有商品并预先计算默认价格-MIN(默认值)与最低的当前价格(如果有的话)之间的MIN。

您可以在这里看到它:http : //sqlfiddle.com/#!2/f31d5/25

幸运的是,多亏了stackoverflow(它可以在这里看到:Rails select子查询(如果可能,没有finder_sql),它已经解决了,但是现在我遇到了类似的问题!

选中所有项目后,是否可以确定新计算的字段(min_price)中的MIN(或MAX)绝对价格

当然,我已经尝试过类似的方法:http : //sqlfiddle.com/#!2/f31d5/26

但是,它没有用。是否有任何聪明的SQL-true方法来获取这些值?

对于SQLFiddle中的此特定方案,它应该返回5(MIN)或500(MAX)

当然,我可以直接从定价表中选择它,如下所示:

从价格中选择MIN(价格);

但是,我不能依靠它,因为该商品的默认价格可能会更低,并且这种方式我无法对其进行检查(我认为SELECT MIN / MAX不适用于JOINGROUP BY)。

还有一件需要注意的事情-我正在为我的搜索系统编写它,这只是其中的一小部分,因此,“ WHERE”子句在那里也很重要,因为实际上并非所有项目都涉及到。

有什么我可以解决此问题的SMART方式(SQL方式)?

PS暂时,我已经通过简单地通过按min_price(ASC / DESC)进行订单查询并应用LIMIT 1并从项目记录本身中收集所需的值来解决了这个问题,但是我对此解决方案感到非常不满意,所以我已经决定在这里询问。

谢谢

PPS完全忘了提及,我无法避免这种SQL查询,因为我有一个分页系统实际上附加了LIMIT X,OFFSETY。因此,我需要选择GLOBALLY值,而不仅是针对特定页面!

戈登·利诺夫

您不需要第二次致电min()我认为这可以满足您的需求:

SELECT LEAST(IFNULL(MIN(prices.price),
                    items.default_price),
             default_price) as min_price
FROM items LEFT OUTER JOIN
      prices
      ON prices.item_id = items.id
GROUP BY items.id;

如果您希望所有商品的最低价格,则可以删除该group by条款。但是,我认为子查询可以更清楚地了解其意图:

select min(min_price)
from (SELECT LEAST(IFNULL(MIN(prices.price),
                          items.default_price),
                   default_price) as min_price
      FROM items LEFT OUTER JOIN
            prices
            ON prices.item_id = items.id
      GROUP BY items.id
     ) p;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章