web-dev-qa-db-ja.com

SQLでの整数としての出力の選択/キャスト

ユーザー入力の1日あたりの平均数のグラフを表示する必要があるサイトで作業しています。この情報を返すSQLクエリが既にあります。

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

これにより、探している結果が得られますが、結果は小数点以下3桁の精度で表示されます。この数字を丸めたい。もちろん、PHPまたは私のテンプレートエンジンで行うことができますが、データベースでこれをすべて行う方法があるかどうか興味がありました。

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

24
MrGlass
SELECT 
  CAST(sum(number)/count(number) as UNSIGNED) as average, 
  date 
FROM stats 
WHERE * 
GROUP BY date
35
Oleg Dok

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

20
Martin Smith

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)
6
John Woo

DIV演算子 を使用します。

mysql> SELECT 5 DIV 2;
    -> 2

整数除算。 FLOOR()に似ていますが、BIGINT値で安全です。 BIGINTの範囲を超える整数以外のオペランドでは、誤った結果が発生する場合があります。

5
djechlin
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
1
aF.