No MySQL, estou tentando algo como a seguinte consulta, mas não obtendo os resultados desejados:
SELECT ROUND(t.price / t.qty, IF(qty > 1, 4, 2)) AS unit_cost
FROM (
SELECT 0.10 AS price, 1 AS qty
UNION
SELECT 2.60 AS price, 25 AS qty
) t
O que eu gostaria é:
+-----------+
| unit_cost |
+-----------+
| 0.10 |
| 0.1040 |
+-----------+
Mas por algum motivo o resultado é:
+-----------+
| unit_cost |
+-----------+
| 0.100000 |
| 0.104000 |
+-----------+
Curiosamente, isso funciona:
SELECT ROUND(0.10000, IF (1=1, 2, 4));
Então eu sei que o arredondamento condicional é possível. Como posso alcançar o conjunto de resultados desejado?
Tente usar FORMAT()
Eu acho, sem prova sólida, que
ROUND()
ignora o segundo argumento, a menos que seja um literal inteiro.Aqui está uma solução alternativa:
Se você precisar de mais de 2 casos, considere usar uma
CASE
expressão.Sinta-se à vontade para enviar um relatório de bugs em bugs.mysql.com, solicitando que
ROUND()
permita uma expressão como segundo argumento ou que a documentação indique o contrário.