mysql - 如何使用 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
如果游客使用价格组选项必须仅使用价格组但游客使用价格正常选项必须仅使用价格正常。
对不起,我的英语不好。
解决方案
存在一个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 的测试在这里
推荐阅读
- arrays - 将相同的数据传递给Scala中的两个或多个方法
- java - 为什么我在 ~/.android 文件夹中没有 debug.keystore(对于 mac)?
- javascript - Html 和 Javascript:如何返回用户输入
- javascript - Sinonjs存根不替换方法
- javascript - JavaScript 类型转换 ==
- python - 如何向此 reddit 机器人代码添加更多子版块/关键字?
- json - 在没有 perl 的情况下使用 sed、grep 或 awk 来复制正向回溯
- javascript - 如何在 Firefox 56 中使用 JavaScript 获取文本形式的剪贴板?
- sql-server - 多客户维度
- html - 上传 html 文件后,其损坏的图像