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 05/09/2011, 19h04   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 62
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 62
Points : 14
Points : 14
Par défaut Problème avec une avg

Bonjour,

j'ai des données comme suit:
chaque personne a une note sur 100
et la troisième colonne désigne si cette personne est évalué ou pas encore

nom    | note | de 
PERS1 |  0   |  0 
PERS2 | 30  |  1 
PERS3 | 10  |  1 
PERS4 | 30  |  1 
PERS5 | 44  |  1 
je voudrais avoir une requête qui pourrait me faire la moyenne des notes mais sans calculer ceux qui n'ont pas été évalués grâce à la colonne de dans la table

dans ce cas la requête doit calculer 114/4 donc le résultat c'est 28.5

j'ai déjà tenté une requête mais celle la calcule 114/5 et le résultat obtenu est 22.8 ce qui est faux

voici ma requête:
Code :
SELECT ROUND(avg(note)) FROM tab_note WHERE de<>0
Merci
jbenz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 19h20   #2
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
Ça me semble bien étrange comme résultat...

Parce que ta requête est bonne !
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 06h11   #3
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
Bonjour

oui la requête est correcte; au détail qu'elle ne peut te renvoyer le résultat que tu indiques.

Dans la requête, tu places un Round qui arrondit le résultat, il doit donc renvoyer 22 et non 22.8.

Code :
1
2
3
SELECT avg(note) * 1.00 
    FROM tab_note 
    WHERE de = 1
Le "1.00" est pour envoyer le résultat avec 2 chiffres après la virgule.
Si "de" ne contient que des 0 et des 1, il est plus judicieux de mettre "de = 1"
dehorter olivier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 12h31   #4
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
Si "de" ne contient que des 0 et des 1, il est plus judicieux de mettre "de = 1"
+1

Citation:
Dans la requête, tu places un Round qui arrondit le résultat, il doit donc renvoyer 22 et non 22.8.
Sauf que 114/4=28,5


Moi je n'ai pas le soucis:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
WITH TAB (nom ,note ,de)
AS(
SELECT
'PERS1' ,0,0 
UNION ALL
SELECT
'PERS2' ,30,1
UNION ALL
SELECT
'PERS3' ,10,1 
UNION ALL
SELECT
'PERS4' ,30,1 
UNION ALL
SELECT
'PERS5' ,44,1 )
SELECT AVG(CAST (note AS DECIMAL(4,2)))
FROM TAB
WHERE de<>0
Me donne bien 28.5
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk 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 17h17.


 
 
 
 
Partenaires

Hébergement Web