2012-01-17 28 views
19

我在一個網站上工作,需要我顯示每天用戶輸入的平均數量。我有一個SQL查詢已經返回該信息對我說:在SQL中選擇/轉換輸出爲整數

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

這給了我,我要找的結果,但結果與三位小數精度給出。我想圍繞這個數字。當然,我可以在PHP或我的模板引擎中完成它,但我很好奇,是否有辦法在數據庫中完成這一切。

有沒有辦法將輸出作爲一個整數(在MySQL中)?

+3

出於好奇,什麼理由你不使用[AVG函數(http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_avg)? – 2012-01-17 14:15:20

+0

@jimmy_keen不知道存在!有沒有理由使用它? (更好,更快,更強?) – MrGlass 2012-01-17 14:19:36

+1

@MrGlass - 更簡潔並避免在其他RDBMS中可能被零問題區分(AFAIK MySQL無論如何均返回零除零) – 2012-01-17 14:22:01

回答

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

-1。如果你使用「INT」作爲類型,你會得到一個錯誤。 CAST/CONVERT的可用類型可以在文檔http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_convert – Corneliu 2013-05-07 12:56:22

+1

中看到那很重要?該方法是回答Q. – 2013-05-07 17:37:09

+0

@ Corneliu我嘗試'INT'沒有錯誤。 – alex 2016-06-28 07:25:09

1
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 
5

如何使用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) 
+0

它適用於我。 – 2013-04-20 03:45:37

17

的有效類型MySQL中的CAST如下

  • 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部分都不能加起來爲負數。

4

使用DIV operator

mysql> SELECT 5 DIV 2; 
    -> 2 

整數除法。與FLOOR()類似,但使用BIGINT值是安全的。對於超過BIGINT範圍的非整數操作數可能會出現錯誤的結果。