我有这样的查询:
... WHERE ... AND (IF(category.discount_value > 0, product_sizes.product_price * (1-category.discount_value/100),
IF(sub_category.discount_value > 0,product_sizes.product_price * (1-sub_category.discount_value/100),
IF(discount.product_id = product.id AND discount.from_date < now() AND discount.to_date >= now() AND discount.status = 1, product_sizes.product_price * (1-discount.percent/100),product_sizes.product_price)
)
)) >= 100 ...
请注意,这是查询的一部分,它是一个很长的查询,所以我试图让我更容易理解我的问题。
并考虑表格product_sizes
:
product_id | price
1 | 50
1 | 110
基本上,我正在检查类别的折扣,如果没有折扣,我检查子类别是否有一个,最后如果两个都是假的话,如果项目本身有折扣。
问题是,我希望在此处的代码中使用50
时使用第一项(价格product_sizes.price
)并将其用作最大/最小值,因此在这种情况下它赢了不会出现在结果中,但现在大部分时间都是最后一个。
我尝试添加别名,但后来我无法在WHERE
子句中使用该别名,而HAVING
子句解决方案忽略了GROUP BY
,因此它也无效。
此外,子查询不能使用父查询中的值,因此它不适用于我。我也在使用查询本身给出的product.id
。
我希望你能理解这是什么问题。我正在寻找类似函数或类似事物的东西,如FIRST_V(product_sizes.product_price)
。
提前致谢。
答案 0 :(得分:0)
select price from (select product_id,min(price) as price from product_sizes group by product_id)