Подтвердить что ты не робот

Выбор/выдача результата как целого в SQL

Я работаю над сайтом, который требует от меня отображать график среднего числа в день ввода пользователя. У меня уже есть SQL-запрос, который возвращает мне эту информацию:

SELECT sum(number)/count(number) as average, date FROM stats WHERE * GROUP BY date

Это дает мне результат, который я ищу, но результат дается с точностью до трех десятичных знаков. Я хочу округлить это число. Конечно, я мог бы сделать это на PHP или на моем шаблоне, но мне было любопытно, есть ли способ сделать это в базе данных.

Есть ли способ сделать вывод как целое (в MySQL)?

4b9b3361

Ответ 1

SELECT 
  CAST(sum(number)/count(number) as UNSIGNED) as average, 
  date 
FROM stats 
WHERE * 
GROUP BY date

Ответ 2

Допустимые типы для 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 может добавить отрицательное число.

Ответ 3

как использовать 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)

Ответ 4

Используйте DIV оператор.

mysql> SELECT 5 DIV 2;
    -> 2

Целочисленное деление. Подобно FLOOR(), но безопасен с значениями BIGINT. Неправильные результаты могут возникать для неинтегрированных операндов, которые превышают диапазон BIGINT.

Ответ 5

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