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 07/09/2011, 20h27   #1
Invité de passage
 
Inscription : juin 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 2
Points : 0
Points : 0
Par défaut Problème de requête MIN + COUNT

Bonjour,

je suis en train de m'arracher les cheveux sur une requête SQL. J'ai deux tables, une table CAMPAGNE et une table MEMBRES. Je souhaite récupérer l'id de la campagne ayant le moins de membres.

La table campagne dispose de l'id campagne ainsi que de son libele et d'autre caractéristiques.
La table membre dispose quand à elle de l'id_campagne ( clef étrangère ).

Je n'arrive pas à récupérer le résultat du COUNT(*) pour le réintégrer dans le MIN.

Un petit peu d'aide serait fort sympathique.
kassbonbek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 20h35   #2
Invité de passage
 
Inscription : juin 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 2
Points : 0
Points : 0
ci-joint les structure des deux tables concernées.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE IF NOT EXISTS `campagne` (
  `id_campagne` int(11) NOT NULL AUTO_INCREMENT,
  `lbl_campagne` varchar(40) NOT NULL,
  `nb_max_users` int(11) NOT NULL,
  `type` int(11) NOT NULL,
  PRIMARY KEY (`id_campagne`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
 
CREATE TABLE IF NOT EXISTS `membres` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_campagne` int(11) NOT NULL DEFAULT '0',
  `login` varchar(20) NOT NULL,
  `password` varchar(90) NOT NULL,
   ................................................
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;
kassbonbek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 20h48   #3
Membre confirmé
 
Homme Benjamin
Consultant informatique
Inscription : août 2007
Messages : 160
Détails du profil
Informations personnelles :
Nom : Homme Benjamin
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2007
Messages : 160
Points : 248
Points : 248
Personnellement je créerai une vue associée à la comptabilisation du nombre de membres par campagne, et je requêterai sur cette vue.

Code :
1
2
3
4
5
CREATE VIEW V_NB_MEMBRES_PAR_CAMPAGNE AS
SELECT c.id_campagne AS id_campagne, COUNT(DISTINCT m.id) AS nb_membres
FROM campagne c
LEFT JOIN membres m ON c.id_campagne = m.id_campagne
GROUP BY c.id_campagne
Code :
1
2
SELECT id_campagne FROM V_NB_MEMBRES_PAR_CAMPAGNE
WHERE nb_membres = (SELECT MIN(nb_membres) FROM V_NB_MEMBRES_PAR_CAMPAGNE)
bhamp0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 08h19   #4
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 092
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 092
Points : 1 898
Points : 1 898
Bonjour,
Avec MySql tu peux aussi utiliser LIMIT pour ne renvoyer qu'une seule ligne:
Code SQL :
1
2
3
4
5
6
 
SELECT c.id_campagne AS id_campagne, COUNT(DISTINCT m.id) AS nb_membres
FROM campagne c
LEFT JOIN membres m ON c.id_campagne = m.id_campagne
GROUP BY c.id_campagne
ORDER BY 2 LIMIT 1

Par contre je ne suis pas très sûr de moi concernant la syntaxe de LIMIT

Tatayo
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 10h34   #5
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
Code :
1
2
3
4
5
6
7
8
9
SELECT c.id_campagne, Count(m.id) AS Compte_id
FROMcampagne c LEFT JOIN membres m ON c.id_campagne = m.id_campagne
GROUP BY c.id_campagne
HAVING Count(m.id) =(SELECT min(Compte_id)
                               FROM (SELECT E_MVT.ste, Countm.id) AS Compte_id
                                         FROM campagne c LEFT JOIN membres m ON
                                                  c.id_campagne = m.id_campagne
                                    GROUP BY c.id_campagne)
                             )
boussafi 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 22h29.


 
 
 
 
Partenaires

Hébergement Web