php - Mysql 和 PHP 语句中的 IF 函数与 LEAST()
问题描述
我目前正在尝试获取一个脚本来显示 2 列之间的最小值。我遇到的问题是某些行在一列显示 N/A 或 NA,因此它会忽略它。即使它是 NA,我怎样才能让它显示该行的值。
例子
Name | pCst | cCst
______________________
Player 1 | 352 | 392
Player 2 | NA | 400
所以在上面我想为玩家 2 显示 400 和为玩家 1 显示 352
"SELECT LEAST(pCst,cCst)
AS Cost
FROM users";
编辑:
"SELECT name,make,model
CASE
WHEN pCost IS NULL THEN cCost
WHEN cCost IS NULL THEN pCost
ELSE LEAST(cCost, pCost)
END AS Cost
FROM users"
;
使用上面的示例这不起作用。如果我删除名称、品牌、型号,它会起作用,但如果我添加它们,脚本不会执行
解决方案
这是 NULL 被发明的原因之一。将您的值存储为字符串会使事情变得复杂,最终需要大量转换:
SELECT CASE
WHEN pCst IN ('NA', 'N/A') AND cCst IN ('NA', 'N/A') THEN 0
WHEN pCst IN ('NA', 'N/A') THEN CAST(cCst AS UNSIGNED)
WHEN cCst IN ('NA', 'N/A') THEN CAST(pCst AS UNSIGNED)
ELSE LEAST(CAST(cCst AS UNSIGNED), CAST(pCst AS UNSIGNED)
END AS Cost
FROM users
;
如果您在两者都是“NA”时实际上想要某种形式的“NA”,那么需要更多(不同)的转换......
SELECT CASE
WHEN pCst IN ('NA', 'N/A') AND cCst IN ('NA', 'N/A') THEN 'NA'
WHEN pCst IN ('NA', 'N/A') THEN cCst
WHEN cCst IN ('NA', 'N/A') THEN pCst
ELSE CAST(LEAST(CAST(cCst AS UNSIGNED), CAST(pCst AS UNSIGNED) AS CHAR)
END AS Cost
FROM users
;
如果您对字段使用可为空的整数类型,则它会更简单:
SELECT CASE
WHEN pCst IS NULL THEN cCst
WHEN cCst IS NULL THEN pCst
ELSE LEAST(pCst, cCst)
END AS Cost
FROM users
;
;
推荐阅读
- flutter - 如何在 Flutter 中为文本字段自动显示键盘
- python - 相当于 pandas 中的有、滞后或类似的
- sparse-matrix - 在 Accord.NET 中创建和使用稀疏矩阵
- javascript - 无法在“CSSStyleDeclaration”上执行“setProperty”:这些样式是计算出来的,因此“opacity”属性是只读的
- react-native - 如何在 react-native-navigation 底部标签栏中设置图标大小
- python - 在 TensorFlow 2 上实现 A3C
- javascript - js中是否存在类似'onImport'的东西?
- reactjs - React-Bootstrap Collapse 不适用于自定义组件
- excel - VBA中只加粗一部分
- r - 如何使用 barplot() 在 R 中使条更细?