Mysql 在SQL中选择/转换输出为整数

Mysql 在SQL中选择/转换输出为整数,mysql,sql,int,Mysql,Sql,Int,我在一个网站上工作,该网站要求我显示每天用户输入的平均数量的图表。我已经有一个SQL查询将此信息返回给我: SELECT sum(number)/count(number) as average, date FROM stats WHERE * GROUP BY date 这给出了我正在寻找的结果,但结果的精度是三位小数。我想把这个数字四舍五入。当然,我可以用PHP或我的模板引擎来完成,但我很好奇是否有办法在数据库中完成这一切 有没有办法将输出转换为整数(在MySQL中) 或 使用MySQLF

我在一个网站上工作,该网站要求我显示每天用户输入的平均数量的图表。我已经有一个SQL查询将此信息返回给我:

SELECT sum(number)/count(number) as average, date FROM stats WHERE * GROUP BY date
这给出了我正在寻找的结果,但结果的精度是三位小数。我想把这个数字四舍五入。当然,我可以用PHP或我的模板引擎来完成,但我很好奇是否有办法在数据库中完成这一切

有没有办法将输出转换为整数(在MySQL中)


使用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)
MySQL中a的有效类型如下

  • BINARY[(N)]
  • CHAR[(N)]
  • 日期
  • DATETIME
  • DECIMAL[(M[,D])]
  • SIGNED[INTEGER]
  • 时间
  • 无符号[整数]
所以你可以用

SELECT CAST(sum(number)/count(number) AS UNSIGNED) as average...
或者,如果
部分加起来可能是负数,则使用
符号

整数除法。类似于FLOOR(),但使用BIGINT值是安全的。对于超出BIGINT范围的非整数操作数,可能会出现不正确的结果


出于好奇,你有没有不使用的理由?@jimmy_keen根本不知道这是真的!有理由使用它吗?(更好、更快、更强?@MrGlass-更简洁,避免了其他RDBMS中可能出现的被零除问题(AFAIK MySQL在被零除的情况下返回
NULL
)-1。如果使用“INT”作为类型,则会出现错误。可用于强制转换/转换的可用类型可在文档中查看?该方法回答了MySQL 5.5(某些存储库的最新版本)上的Q.@alex问题,它将导致1064错误。它可能适用于一些较新的版本,尽管它似乎没有文档记录
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)
SELECT 
  CAST(sum(number)/count(number) as UNSIGNED) as average, 
  date 
FROM stats 
WHERE * 
GROUP BY date
SELECT CAST(sum(number)/count(number) AS UNSIGNED) as average...
mysql> SELECT 5 DIV 2;
    -> 2