Comment puis-je récupérer les décimales lors de l'arrondissement, en moyenne dans SQL
Voici mon instruction SQL
SELECT ROUND(AVG(column_name), 100)
FROM [database].[dbo].[table]
La réponse que j'ai récupérer est 3
avec une gamme de nombres entre 1 - 5
en 908 lignes.
Je dois dire 3.0
ou 3.09
. Est-ce possible?
- Quel que soit le point de en précisant
100
pour le paramètre longueur deROUND
? - parce que vous avez besoin de 3 arguments pour la fonction round de travail, je suis également d'arrondi au plus proche 100e
- Mais mon point est que vous n'êtes jamais allez obtenir 100 décimales de précision en premier lieu, afin d'
ROUND(,100)
n'affecte en quoi que ce soit. Il suffit de neAVG(column_name)
et être fait avec elle. - à l'aide de
100
avec la fonction ROUND ne signifie pas rond le plus proche 100e. Cela signifie que vous voulez de 100 chiffres après le point décimal. Voir les exemples dans le MSDN: ROUND (Transact-SQL) - Mes excuses, j'ai essayé d'obtenir la réponse fournie par Guffa posté ci-dessous. J'ai été en mesure de faire le point, j'ai atteint lors de l'affichage de la question et sans son aide, je ne crois pas que j'aurais pu atteindre une solution. Je ne comprends pas pourquoi cela a été downvoted comme une personne qui n'a pas fait de recherche.
Vous devez vous connecter pour publier un commentaire.
La moyenne ont le même type de données que les valeurs, ainsi jeté les valeurs:
Je ne sais pas si cela va vous aider à skullomania mais essayez cette
Le flotteur est approximatif, Les décimales sur l'autre main, il sera plus exacte, vous pouvez lire sur les flotteurs de mathématiques et les nombres décimaux. J'ai eu du mal au début avec ce et toujours l'impression d'être perdu à la fois. J'espère que cela va vous aider.
EN C#
pas sûr si je peux avoir des problèmes pour poster la réponse ici, mais avez-vous essayé de convertir une valeur de type double et à l'aide d'un
ExecuteScalar()
essayez ceci:
CAST(AVG(CAST))
, pourquoi ne pourriez-vous faireCAST(AVG(col_name) AS DECIMAL(10,2))
?Vous n'avez même pas besoin de faire un
ROUND
là, vraiment. Vous pourriez convertir vos valeurs àDECIMAL
, comme ceci:FLOAT
apporte également le long de aproximations au lieu de valeurs exactes.Je ne suis pas entièrement sûr de ce que vous demandez, mais je pense que vous êtes désireux d'avoir le nombre retourné avec davantage de précision.
Vous êtes d'emballage à l'appel dans la RONDE fonction, mais si votre colonne du type de données n'a pas de précision supérieure à 0 (par exemple int), vous aurez besoin de jeter ou de CONVERTIR les données vers un autre type de premier.
Voici quelques exemples qui illustrent plusieurs façons de CAST de données de différents types:
Aussi, découvrez MSDN: Types de Données (Transact-SQL).
FLOAT
ne sont pas nécessairement vrai, cependant, elles peuvent varier avec chaque exécution. Ainsi, par exemple,CAST(100 AS FLOAT)
pourrait revenir99.999999
ou100.000001