如何根据case语句中的变量对结果排序

1szpjjfi  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(351)

如何按变量对结果排序 promotion_price 那是从 CASE 声明。我得到的错误是:

  1. Unknown column 'promotion_price' in 'where clause'

我的问题是:

  1. SELECT product.*,
  2. CASE
  3. WHEN promotion.type=1 THEN product.price - (product.price * promotion.value/100)
  4. WHEN promotion.type=2 THEN product.price - promotion.value
  5. ELSE product.price
  6. END promotion_price
  7. FROM product LEFT JOIN page ON product.category_id=page.id
  8. LEFT JOIN promotion_product ON product.id=promotion_product.main_product_id
  9. LEFT JOIN promotion ON promotion_product.promo_id=promotion.id
  10. WHERE (page.id = 12 OR page.id_in = 12)
  11. AND promotion_price >= 49.50
  12. AND promotion_price <= 108.89
  13. GROUP BY product.id
  14. ORDER BY promotion_price ASC

谢谢您!

oknwwptz

oknwwptz1#

我们知道,我们不能在单个sql中使用where子句中的inline列,您可以在subquery中尝试下面的方法。

  1. SELECT *
  2. FROM
  3. (SELECT
  4. CASE
  5. WHEN promotion.type = 1
  6. THEN product.price - (product.price * promotion.value/100)
  7. WHEN promotion.type = 2
  8. THEN product.price - promotion.value
  9. ELSE product.price
  10. END promotion_price,
  11. product.*
  12. FROM
  13. product
  14. LEFT JOIN
  15. page ON product.category_id = page.id
  16. LEFT JOIN
  17. promotion_product ON product.id = promotion_product.main_product_id
  18. LEFT JOIN
  19. promotion ON promotion_product.promo_id = promotion.id
  20. WHERE
  21. (page.id = 12 OR page.id_in = 12)
  22. GROUP BY
  23. product.id) s
  24. WHERE
  25. promotion_price >= 49.50
  26. AND promotion_price <= 108.89
  27. ORDER BY
  28. promotion_price ASC
展开查看全部
ukdjmx9f

ukdjmx9f2#

在必须重复代码的情况下,不能使用列别名

  1. SELECT product.*,
  2. CASE
  3. WHEN promotion.type=1 THEN product.price - (product.price * promotion.value/100)
  4. WHEN promotion.type=2 THEN product.price - promotion.value
  5. ELSE product.price
  6. END promotion_price
  7. FROM product LEFT JOIN page ON product.category_id=page.id
  8. LEFT JOIN promotion_product ON product.id=promotion_product.main_product_id
  9. LEFT JOIN promotion ON promotion_product.promo_id=promotion.id
  10. WHERE (page.id = 12 OR page.id_in = 12)
  11. AND (CASE
  12. WHEN promotion.type=1 THEN product.price - (product.price * promotion.value/100)
  13. WHEN promotion.type=2 THEN product.price - promotion.value
  14. ELSE product.price
  15. END ) >= 49.50
  16. AND (CASE
  17. WHEN promotion.type=1 THEN product.price - (product.price * promotion.value/100)
  18. WHEN promotion.type=2 THEN product.price - promotion.value
  19. ELSE product.price
  20. END) <= 108.89
  21. GROUP BY product.id
  22. ORDER BY promotion_price ASC

where条件是在计算select列别名之前计算的,因此在计算where条件时,查询引擎不知道select列别名

展开查看全部

相关问题