ユーザー入力の1日あたりの平均数のグラフを表示する必要があるサイトで作業しています。この情報を返すSQLクエリが既にあります。
SELECT sum(number)/count(number) as average, date FROM stats WHERE * GROUP BY date
これにより、探している結果が得られますが、結果は小数点以下3桁の精度で表示されます。この数字を丸めたい。もちろん、PHPまたは私のテンプレートエンジンで行うことができますが、データベースでこれをすべて行う方法があるかどうか興味がありました。
出力を整数としてキャストする方法はありますか(MySQLで)?
SELECT
CAST(sum(number)/count(number) as UNSIGNED) as average,
date
FROM stats
WHERE *
GROUP BY date
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
。
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)
DIV
演算子 を使用します。
mysql> SELECT 5 DIV 2;
-> 2
整数除算。 FLOOR()に似ていますが、BIGINT値で安全です。 BIGINTの範囲を超える整数以外のオペランドでは、誤った結果が発生する場合があります。
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