仅选择WHERE子句内IF语句中的第一个值

时间:2018-02-14 18:46:10

标签: mysql sql

我有这样的查询:

... 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)

提前致谢。

1 个答案:

答案 0 :(得分:0)

select price from (select product_id,min(price) as price from product_sizes group by product_id)