首页 > 解决方案 > 如何使用 if else 使用列选择 sql

问题描述

我是 mysql 的初学者,这是我的毕业项目,请帮助我。


//AMOUNT_PEOPLE is variable in nodejs
//place_id is variable in nodejs recieve from front end.
SELECT 
(IF AMOUNT_PEOPLE >= 10
  RETURN COLUMN package_tb.price_group*(AMOUNT_PEOPLE-1)
ELSE IF AMOUNT_PEOPLE >= 6
  RETURN COLUMN package_tb.price_group*(AMOUNT_PEOPLE-1) - (SELECT option_tb.price_group FROM option_tb WHERE obtion_tb.place_id = place_id)
ElSE
  RETURN COLUMN price_normal*AMOUNT_PEOPLE
END IF) AS price,name,detail
FROM package_tb WHERE package_tb.place_id = place_id

这个订票程序的逻辑是检查游客人数,如果游客 >= 10 必须使用 group_price 并且免费 1 人包括免费食物选项,但如果游客 >= 6 必须使用 group_price 和免费 1 人但最后不包括免费食物选项游客 0-5 必须使用 normal_price

此类客户告诉我“我要 10 位游客的票”,系统将按上述说明进行检查。

package_tb
-package_id
-place_id
-name
-detail
-price_group
-price_normal

option_tb
-option_id
-place_id
-name
-price_group
-price_normal

place_tb
-place_id
-name

如果游客使用价格组选项必须仅使用价格组但游客使用价格正常选项必须仅使用价格正常。

对不起,我的英语不好。

标签: mysqlsql

解决方案


存在一个CASE函数。
这是用于切换逻辑的标准 SQL 函数。

根据更新的问题,我假设每个地方可以有多个选项。

所以使用 node.js 变量:

SET @place_id = ${PLACE_ID};
SET @amount_people = ${AMOUNT_PEOPLE};
SELECT 
 CASE 
 WHEN @amount_people >= 10 
   THEN (p.price_group * (@amount_people - 1))
 WHEN @amount_people >= 6 
   THEN (p.price_group * (@amount_people - 1)) - SUM(o.price_group)
 ELSE p.price_normal
 END AS price, 
 p.name, 
 p.detail
FROM package_tb p
LEFT JOIN option_tb o ON o.place_id = p.place_id
WHERE p.place_id = @place_id
GROUP BY p.package_id, p.place_id, p.price_normal, p.price_group, p.name, p.detail;

对 reextester 的测试在这里


推荐阅读