Ответ 1
SELECT
CAST(sum(number)/count(number) as UNSIGNED) as average,
date
FROM stats
WHERE *
GROUP BY date
Я работаю над сайтом, который требует от меня отображать график среднего числа в день ввода пользователя. У меня уже есть SQL-запрос, который возвращает мне эту информацию:
SELECT sum(number)/count(number) as average, date FROM stats WHERE * GROUP BY date
Это дает мне результат, который я ищу, но результат дается с точностью до трех десятичных знаков. Я хочу округлить это число. Конечно, я мог бы сделать это на PHP или на моем шаблоне, но мне было любопытно, есть ли способ сделать это в базе данных.
Есть ли способ сделать вывод как целое (в MySQL)?
SELECT
CAST(sum(number)/count(number) as UNSIGNED) as average,
date
FROM stats
WHERE *
GROUP BY date
Допустимые типы для CAST
в MySQL выглядят следующим образом
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL[(M[,D])]
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
Итак, вы можете использовать
SELECT CAST(sum(number)/count(number) AS UNSIGNED) as average...
Или SIGNED
, если часть SUM
может добавить отрицательное число.
как использовать MySQL FORMAT
Функция?
mysql> SELECT FORMAT(12345.123456, 4);
+-------------------------+
| FORMAT(12345.123456, 4) |
+-------------------------+
| 12,345.1235 |
+-------------------------+
1 row in set (0.00 sec)
mysql> SELECT FORMAT(12345.123456, 0);
+-------------------------+
| FORMAT(12345.123456, 0) |
+-------------------------+
| 12,345 |
+-------------------------+
1 row in set (0.00 sec)
Используйте DIV
оператор.
mysql> SELECT 5 DIV 2;
-> 2
Целочисленное деление. Подобно FLOOR(), но безопасен с значениями BIGINT. Неправильные результаты могут возникать для неинтегрированных операндов, которые превышают диапазон BIGINT.
SELECT convert(int, sum(number)/count(number)) as average,
date
FROM stats
WHERE * GROUP BY date
или
SELECT
CAST(sum(number)/count(number) as INT) as average,
date
FROM stats
WHERE *
GROUP BY date