这是查询,经过简化。
SELECT `a`, TRUNCATE(`b` / 1000, 3) AS `b`
FROM (
...
) AS `m`
GROUP BY `a`
ORDER BY `a`
我要执行的操作是根据 b 的值更改小数位数(实际上为3)。
所以我尝试了这个:
SELECT `a`, TRUNCATE(`b` / 1000, IF(`b` < 10, 2, 3)) AS `b` ...
还有这个
SELECT `a `, IF(`b ` < 10, TRUNCATE(`b ` / 1000, 2), TRUNCATE(`b ` / 1000, 3)) AS `b `
如果b
小于10,我希望 3 小数位,否则为 2 。
但这似乎不起作用...
资源:https://dev.mysql.com/doc/refman/8.0/en/control-flow-functions.html#function_if
答案 0 :(得分:1)
只需更改您在查询中放置的值位置
SELECT `a `, IF(b < 10, TRUNCATE(b / 1000, 3), TRUNCATE(b / 1000, 2))
AS b
if(a <1,2,3)表示如果a <1则2作为结果中的一个值,因此您必须切换值的位置
使用round
SELECT a , IF(b < 10, round((b / 1000), 2), round((b / 1000), 3) ) AS b
ROUND()函数将数字四舍五入到指定的小数位数。
示例SELECT ROUND(345.156, 2);
结果= 345.16
SELECT ROUND(345.156, 2); result = 345.156
如果您不希望四舍五入,那么在b值小于10的情况下TRUNCATE将显示0.00,那么不工作意味着什么?
b <10时,您需要保留小数点后3位,因此您必须更改查询结果的位置
答案 1 :(得分:1)
在If()
中评估为真/假的情况下,您放错了查询的运行顺序。以下可能有效:
SELECT `a `,
IF(`b ` < 10,
TRUNCATE(`b ` / 1000, 3),
TRUNCATE(`b ` / 1000, 2)
) AS `b `