Je travaille sur un site qui me demande d'afficher un graphique du nombre moyen par jour d'une entrée utilisateur. J'ai déjà une requête SQL qui me renvoie ces informations:
SELECT sum(number)/count(number) as average, date FROM stats WHERE * GROUP BY date
Cela me donne le résultat que je recherche, mais le résultat est donné avec une précision de trois décimales. Je veux arrondir ce nombre. Je pouvais le faire dans PHP ou mon moteur de modèle, bien sûr, mais j'étais curieux de savoir s'il y avait un moyen de tout faire dans la base de données.
Existe-t-il un moyen de convertir une sortie sous forme d'entier (dans MySQL)?
SELECT
CAST(sum(number)/count(number) as UNSIGNED) as average,
date
FROM stats
WHERE *
GROUP BY date
Les types valides pour un CAST
dans MySQL sont les suivants
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL[(M[,D])]
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
Vous pouvez donc utiliser
SELECT CAST(sum(number)/count(number) AS UNSIGNED) as average...
Ou SIGNED
si la partie SUM
peut un jour correspondre à un nombre négatif.
que diriez-vous d'utiliser MySQL FORMAT
Function?
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)
Utilisez DIV
opérateur .
mysql> SELECT 5 DIV 2;
-> 2
Division entière. Similaire à FLOOR (), mais est sûr avec les valeurs BIGINT. Des résultats incorrects peuvent se produire pour les opérandes non entiers qui dépassent la plage BIGINT.
SELECT convert(int, sum(number)/count(number)) as average,
date
FROM stats
WHERE * GROUP BY date
ou
SELECT
CAST(sum(number)/count(number) as INT) as average,
date
FROM stats
WHERE *
GROUP BY date