Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/02/2011, 09h07   #1
 
Inscription : novembre 2004
Messages : 39
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 39
Points : -3
Points : -3
Par défaut Moyenne - arrondi, Fonction ROUND

Bonjour,
J'ai un tableau de notes et je souhaite en faire la moyenne, les valeurs doivent rester sour la forme d'entier (int).

Voici la requête :
Code :
1
2
3
4
5
6
7
8
SELECT     NUM_DEGUSTATION, 
  AVG(CUISSON) AS note1, 
  AVG(CHAIR) AS note2, 
  AVG(ASPECT) AS note3, 
  AVG(SICCITE) AS note4, 
  AVG(GRANULATION) AS note5
FROM         dbo.DEGUSTATION_DETAIL
GROUP BY NUM_DEGUSTATION
ECHANTILLONS notes1 notes2 notes3 notes4 notes5
1056 1 5 4 3 1
1057 3 4 4 4 4
1058 1 6 4 3 4
1059 2 6 3 3 3
SOMME 7 21 15 13 12
Moyenne 1.75 5.25 3.75 3.25 3
moyenne - arrondi 2 5 4 3 3
REQUETE SQL 1 5 3 3 3
REQUETE SQL ROUND(X,0) 1 5 3 3 3

La moyenne arrondi correspond à la valeur attendue, sous SQL je n'ai pas ce résultat, même avec Round ?

Question, format de données, fonction pas fiable ?

Merci de m'éclairer !

Salutations
Muller Guy
Muller Guy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 09h31   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
bonjour, quel est votre sgbd ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 10h13   #3
 
Inscription : novembre 2004
Messages : 39
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 39
Points : -3
Points : -3
Citation:
Envoyé par punkoff Voir le message
bonjour, quel est votre sgbd ?
Bonjour,
je suis sur sql 2008 r2

Merci pour votre réponse.
Muller Guy
Muller Guy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 11h02   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
C'est "grâce" à la cohérence des types de données. Comme vos données sont entières, tous les calculs sont fait sur des entiers.
Autant sur addition / soustraction / multiplication, je le conçois, autant sur les divisions je trouve cela stupide, mais c'est la norme SQL qui l'impose !

Pas de choix, il faut transformer vos données dans un autre type, faire les calculs, et reconvertir ensuite.

Je vous ai fait une indentation spéciale pour que ce soit visuel :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
WITH MaTable (col1, col2) AS
(
SELECT 1056, 1 union ALL
SELECT 1057, 3 union ALL
SELECT 1058, 1 union ALL
SELECT 1059, 2 
)
SELECT            avg(     col2            )                 AS col2_avg_int,
                  avg(cast(col2 AS decimal))                 AS col2_avg_dec,
            round(avg(cast(col2 AS decimal)), 0)             AS col2_avg_dec_rnd,
       cast(round(avg(cast(col2 AS decimal)), 0) AS integer) AS col2_avg_dec_rnd_int
  FROM MaTable
 
col2_avg_int  col2_avg_dec  col2_avg_dec_rnd  col2_avg_dec_rnd_int
------------  ------------  ----------------  --------------------
1             1.750000      2.000000          2
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h48.


 
 
 
 
Partenaires

Hébergement Web