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 04/02/2011, 10h40   #1
Membre habitué
 
Inscription : juillet 2008
Messages : 120
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 120
Points : 127
Points : 127
Par défaut Somme d'une colonne et d'un COUNT

Bonjour,

Malgré les recherches que j'ai effectuées, je ne parviens pas à arriver à mes fins. Je me permets donc de me tourner vers vous.

Je dispose de la base de données suivante, qui représente des individus. Chaque individu a deux scores (critere1 et critere2), et peux disposer de 0, 1, ou plusieurs options :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
CREATE TABLE IF NOT EXISTS `individus` (
  `cle` int(11) NOT NULL AUTO_INCREMENT,
  `crit1` int(11) NOT NULL,
  `crit2` int(11) NOT NULL,
  PRIMARY KEY (`cle`)
);
 
 
INSERT INTO `individus` (`cle`, `critere1`, `critere2`) VALUES
(1, 10, 8),
(2, 20, 0);
 
CREATE TABLE IF NOT EXISTS `options` (
  `cleInd` int(11) NOT NULL,
  `cleOpt` int(11) NOT NULL
);
 
INSERT INTO `options` (`cleInd`, `cleOpt`) VALUES
(1, 1),
(1, 2),
(2, 2);
Ainsi, j'ai dans cette base :
- un individu 1 qui a les notes critere1=10, critere2=8, et les options 1 et 2
- un individu 2 qui a les notes critere1=20, critere2=0, et uniquement l'option 2.

Je souhaite pouvoir calculer, pour chacun de ces individus, un score qui soit fonction de leurs deux notes, et du nombre d'options. Par exemple : 1*critere1 + 2*critere2 + nombre d'options.

Je souhaite donc, ici, un résultat de la forme :
Code :
1
2
3
4
5
 
cle | score
-------------
 1  |  28  // (car 28 = 10 + 2*8 + 2)
 2  |  21  // (car 21 = 20  + 2*0 + 1)
Toutefois, je ne vois pas comment prendre en compte, dans cette somme, le nombre d'options.

En effet, sans cette somme, je peux faire simplement :
Code :
1
2
 
SELECT cle, critere1+2*critere2 AS score FROM individus
et si je veux juste calculer cette somme, je peux faire :
Code :
1
2
 
SELECT COUNT(cleInd) FROM options GROUP BY cleInd
Toutefois, je n'arrive pas à faire intervenir ce COUNT dans mon score.

Pourriez vous m'indiquer dans quelle voie je devrais chercher pour résoudre mon problème ?
_ash_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 10h57   #2
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 081
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 081
Points : 1 875
Points : 1 875
Bonjour,
Tu peux essayer ceci:
Code SQL :
1
2
3
4
5
 
SELECT individus.cle, critere1+2*critere2 + count(*) AS score
FROM individus
LEFT OUTER JOIN options ON options.cleind = individus.cle
GROUP BY individus.cle, critere1, critere2

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 11h06   #3
Membre habitué
 
Inscription : juillet 2008
Messages : 120
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 120
Points : 127
Points : 127
Excellent, ça produit exactement le résultat souhaité !

De toute évidence, je ne maitrise pas assez bien la notion de GROUP BY, et je vais approfondir mon apprentissage là dessus.

Je te remercie beaucoup !
_ash_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h14.


 
 
 
 
Partenaires

Hébergement Web