[MySQL] Requête Imbriquées + Calcul de pourcentage

Résolu
jordane45
Messages postés
35751
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 juin 2022
- 7 août 2013 à 16:00
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- 3 sept. 2013 à 11:23
Bonjour,

J'aurai besoin de vos lumières ^^


Je souhaiterais récupérer un certain nombre d'informations issues de deux tables + effectuer un calcul de pourcentage

** Je dispose donc de DEUX tables
- Une Table USERS ( ID , Nom, GROUPE,Date_INSCRIPTION )
- Une Table MODULES (ID, TITRE_Module , UserID,publication_date)

Je souhaites obtenir [Dans une même Requête] les champs suivants:
- Nombre de Modules réalisé par GROUPE
- Nombre de USERS appartenants à chaque GROUPE
- Pourcentage (rapport entre les deux infos ci-dessus)


-> Je parviens à récupérer le Nombre de MODULES par GROUPE (avec, comme vous pouvez le voir un facteur de DATE..)
SELECT tmpMOD.GROUPE as GROUPES ,COUNT(*) AS NB_MODULES
	  FROM (
	  SELECT DISTINCT M.UserID,G.*
	  FROM MODULE M
	      ,USERS U
	  WHERE M.UserID = U.id
	  GROUP BY M.id_User
	  HAVING Max(M.publication_date) > now() - interval 1 year
	  ) tmpMOD
	  group by tmpMOD.GROUPE


Et donc, comment faire en sorte d'avoir en plus :
SELECT GROUPE, Count(*) 
FROM USERS 
WHERE USERS.Date_INSCRIPTION > now() - interval 1 year



Merci pour votre aide.



NB: Ce ne sont pas les vrais noms de mes champs, ni même de mes tables, ce n'est qu'à titre d'exemple..



8 réponses

jordane45
Messages postés
35751
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 juin 2022
358
Modifié par ichiriac le 8/08/2013 à 20:03
toute la data dont tu as besoin pour tes calculs se trouve dans la table MODULE
Malheureusement, non..

- Dans ma table Module j'ai bien le nombre de personnes ayant utilisés les différents modules... mais pas le nombre "total" de personnes existantes dans chaque groupe.

- La table Module ne contient pas non plus les groupes des users...

voici à quoi pourrait ressemble la structure des tables (dans ma base "test") :
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET FOREIGN_KEY_CHECKS=0 */;

-- Dumping structure for table test.modules
DROP TABLE IF EXISTS 'modules';
CREATE TABLE IF NOT EXISTS 'modules' (
  'id' int(10) NOT NULL AUTO_INCREMENT,
  'Titre' varchar(50) NOT NULL,
  'UserID' int(10) NOT NULL,
  'Publication_Date' datetime NOT NULL,
  PRIMARY KEY ('id'),
  KEY 'UserID' ('UserID')
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

-- Dumping data for table test.modules: ~0 rows (approximately)
/*!40000 ALTER TABLE 'modules' DISABLE KEYS */;
INSERT INTO 'modules' ('id', 'Titre', 'UserID', 'Publication_Date') VALUES
 (1, 'Module 1', 1, '2013-08-08 13:20:50'),
 (2, 'Module 2', 1, '2013-08-08 13:20:50'),
 (3, 'Module 1', 2, '2013-08-08 13:20:50'),
 (4, 'Module 2', 2, '2013-08-08 13:20:50'),
 (5, 'Module 3', 2, '2013-08-08 13:20:50'),
 (6, 'Module 1', 3, '2013-08-08 13:20:50');
/*!40000 ALTER TABLE 'modules' ENABLE KEYS */;


-- Dumping structure for table test.users
DROP TABLE IF EXISTS 'users';
CREATE TABLE IF NOT EXISTS 'users' (
  'id' int(10) NOT NULL AUTO_INCREMENT,
  'nom' varchar(50) NOT NULL,
  'Groupe' varchar(50) NOT NULL,
  'DateInscription' datetime NOT NULL,
  PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;

-- Dumping data for table test.users: ~0 rows (approximately)
/*!40000 ALTER TABLE 'users' DISABLE KEYS */;
INSERT INTO 'users' ('id', 'nom', 'Groupe', 'DateInscription') VALUES
 (1, 'TOTO', 'Grp1', '2013-08-08 13:22:20'),
 (2, 'ZZ', 'Grp1', '2013-08-08 13:22:20'),
 (3, 'FF', 'Grp1', '2013-08-08 13:22:20'),
 (4, 'GG', 'Grp1', '2013-08-08 13:22:20'),
 (5, 'HH', 'Grp2', '2013-08-08 13:22:20'),
 (6, 'II', 'Grp3', '2013-08-08 13:22:20'),
 (7, 'JJ', 'Grp2', '2013-08-08 13:22:20'),
 (8, 'KK', 'Grp1', '2013-08-08 13:22:20');
/*!40000 ALTER TABLE 'users' ENABLE KEYS */;
/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;



Cordialement,
Jordane
____________________________________________
0