我有两个表格:项目和价格(一对多)
每个项目都有默认价格,但是此价格可以在第二个表中覆盖(在某些情况下)。
首先,我遇到了一个问题,即要提取所有商品并预先计算默认价格-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不适用于JOIN或GROUP 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] 删除。
我来说两句