2012-01-17 4 views
19

私はユーザーの入力の平均日数のグラフを表示する必要があるサイトで作業しています。私は私にこの情報を返し、既にSQLクエリを持っている:SQLで出力を整数として選択/キャスト

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

これは私が探していますが、結果は3桁の精度で指定された結果を提供します。私はこの番号の丸めたい。私はもちろん、PHPや私のテンプレートエンジンでそれを行うことができましたが、データベース内でこれをすべて実行する方法があるのか​​不思議でした。

(MySQLで)出力を整数としてキャストする方法はありますか?

+3

[AVG関数](http://dev.mysql.com/doc/refman/5.0/ja/group-by-functions.html#function_avg)を使用していない理由はありませんか? –

+0

@jimmy_keenは存在していなかった!それを使用する理由はありますか? – MrGlass

+1

@MrGlass - 他のRDBMSでより簡潔でゼロの問題を回避することができます(AFAIK MySQLはとにかく0で除算するとNULLを返します) –

答えて

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

+1

で確認できます。このアプローチはQ @ –

+0

@Corneliuに答えています。私はエラーなしで 'INT'を試しました。 MySQL 5の@alexの – alex

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

それは私のために働きます。 –

17

  • BINARY[(N)]
  • CHAR[(N)]
  • DATE
  • DATETIME
  • を次のようにMySQLで CASTのための有効なタイプがあります
  • DECIMAL[(M[,D])]
  • SIGNED [INTEGER]
  • TIME
  • UNSIGNED [INTEGER]

SUM一部が今まで負の数まで追加することができますのであれば、あなたは

SELECT CAST(sum(number)/count(number) AS UNSIGNED) as average... 

またはSIGNEDを使用することができます。

4

DIV operatorを使用してください。

mysql> SELECT 5 DIV 2; 
    -> 2 

整数除算。 FLOOR()と同様ですが、BIGINT値では安全です。 BIGINT範囲を超えている非整数オペランドに対して不正な結果が生じることがあります。

関連する問題