Il y a actuellement 82 visiteurs
Mercredi 28 Juillet 2021
accueilactualitésdossierscomparer les prixtélécharger gratuitement vos logicielsoffres d'emploiforum informatique
Connexion
Créer un compte

[MySQL] Un GROUP BY dans un COUNT

Besoin d'aide pour configurer un serveur ? Vous souhaitez obtenir des conseils pour référencer votre site ? Un petit souci pour accéder à votre FTP ? Des soucis de programmation en PHP / ASP / HTML / XHTML / XML / XSLT / CSS / ReactJS / AngularJS / VueJS / CGI / PERL / C / MySQL / PostgreSQL ??? Nous avons peut-être la solution dans ce forum ...

[MySQL] Un GROUP BY dans un COUNT

Message le 20 Juil 2010 11:06

Bonjour,
voici mon soucis, il y a un champ 'service' qui a des données identiques !!!

voici la requete, et je voudrais donc regrouper les 'service' identique

Code: Tout sélectionner
SELECT t2.id2,service,
(SELECT COUNT(categorie)
FROM table1
WHERE categorie='a' AND code1=code2) AS cat
FROM table2 t2
WHERE t2.groupe='1'
ORDER BY t2.id2 ASC


j'ai bien tenté ceci :

Code: Tout sélectionner
SELECT t2.id2,service,
(SELECT COUNT(categorie)
FROM table1
WHERE categorie='a' AND code1=code2) AS cat
FROM table2 t2
WHERE t2.groupe='1'
GROUP BY service
ORDER BY t2.id2 ASC


cela à bien regroupé les 'service'
mais sans comptabiliser l'ensemble des 'cat' ayant le meme nom de 'service'

le soucis c'est qu'il y a des 'service' portant le meme nom et ayant un code1 qui n'égale pas au code2 !

cela ne doit pas être grand chose mais je but sur ce petit truc
merci de votre aide
athome
Visiteur
Visiteur
 
Messages: 9
Inscription: 20 Juil 2010 11:02
 


Re: [MySQL] Un GROUP BY dans un COUNT

Message le 20 Juil 2010 14:21

Bonjour,

La première requète c'est celle d'origine, donc d'un programme tout fait ? Ou c'est un script que vous avez conçu ? Toujours est-il qu'il normal que ça ne passe pas... Le count se fait sur cette sous requète (SELECT COUNT(categorie) FROM table1 WHERE categorie='a' AND code1=code2) et non pas au niveau du groupe by...
Avatar de l'utilisateur
webmaster
Big Boss
Big Boss
 
Messages: 4909
Inscription: 11 Jan 2002 01:00
 

Re: [MySQL] Un GROUP BY dans un COUNT

Message le 20 Juil 2010 14:40

nan c'est une appli que je fais en interne sur de l'intranet
pour cette requete j'avais déjà eu de l'aide
mais pour cette modification je but un peu

si tu peux m'aider pour que je puisses toujours compter
les 'categorie' par 'groupe' et les grouper par 'service'
ca m'aiderait pas mal ;)
car le soucis c'est que parfois il n'y a personne
dans les 'groupe' et 'service' mais il faut tout de même
afficher le 'service' mais avec le zéro en face !!!
athome
Visiteur
Visiteur
 
Messages: 9
Inscription: 20 Juil 2010 11:02
 

Re: [MySQL] Un GROUP BY dans un COUNT

Message le 20 Juil 2010 17:24

athome a écrit:cela à bien regroupé les 'service'
mais sans comptabiliser l'ensemble des 'cat' ayant le meme nom de 'service'

le soucis c'est qu'il y a des 'service' portant le meme nom et ayant un code1 qui n'égale pas au code2 !

cela ne doit pas être grand chose mais je but sur ce petit truc
merci de votre aide


Ok je vais assayer de t'aider mais il faut que tu expliques un peu plus ce qui est ci-dessus et aussi mettre la vrais requète (et les vrais tables avec leur champs) car ce que tu as écrit n'est pas censé fonctionné en l'état. Tu as donc du supprimé des éléments avant de l'afficher ici sur le forum mais du coup ça me facilte pas les choses.

Exemple la sous requète SELECT COUNT(categorie) FROM table1 WHERE categorie='a' AND code1=code2 compte les catégories de type "a" ou code1=code2 et place le résultat dans cat. Donc cela de fait x cat sauf que le group_by fait forcément chuter ce nombre... Donc difficile de savoir ce que tu veux précisémment. Je sais pas si je suis clair mais c'est pour essayer de montrer que soit tu donnes tes tables avec toutes les colones et une ou deux lignes d'exemple avec la requète, ce que tu obtiens et ce que tu voudrais obtenir. Soit on repart à zero mais il faut tout de même les tables et un exemple de ce que tu veux obtenir précisement comme résultat en faisant de nouvelles requètes. Bref pour résoudre le problème il faut un énoncé clair et précis avec le résultat à attendre... Sans ça je peux pas t'aider...
Avatar de l'utilisateur
webmaster
Big Boss
Big Boss
 
Messages: 4909
Inscription: 11 Jan 2002 01:00
 

Re: [MySQL] Un GROUP BY dans un COUNT

Message le 20 Juil 2010 21:16

merci pour le temps passé déjà ;)

alors dans l'état la 1ere requete ci-dessus fonctionne tres bien
mais au cours du développement une inconnu est arrivé :)
il se trouve que dans les 'groupe' il y a des 'service's qui on le meme nom
mais pas le meme 'code'2 et donc il me double les 'services' dans le résultats
et dans la deuxieme requete cela à bien regroupé les 'service'
mais sans comptabiliser l'ensemble des 'cat' ayant le meme nom de 'service'

je vais essayé de te donner le plus de renseignements
pour t'éclairer, si tu veux autres choses... ;)

J'ai donc deux tables


Code: Tout sélectionner
table1               table2

id1 code1 categorie    id2 code2 groupe
 1   001      a         1   001    1
 2   002      b         2   002    1
 3   003      c         3   003    1
 4   004      d         4   004    2
 5   005      e         5   005    2
 6   006      b         6   006    2
 7   007      a         7   007    3
 8   008      a         8   008    3
 9   009      c         9   009    3



les CREATE TABLE


Code: Tout sélectionner
CREATE TABLE IF NOT EXISTS `table1` (
  `id1` int(11) NOT NULL auto_increment,
  `nom` text NOT NULL,
  `prenom` text NOT NULL,
  `categorie` text NOT NULL,
  `code1` text NOT NULL,
  PRIMARY KEY  (`id1`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;




Code: Tout sélectionner
CREATE TABLE IF NOT EXISTS `table2` (
`id2` int(11) NOT NULL auto_increment,
`groupe` text NOT NULL,
`service` text NOT NULL,
`code2` text NOT NULL,
PRIMARY KEY (`id2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;



et les INSERT INTO

Code: Tout sélectionner
INSERT INTO `table1` (`id1`,`nom`, `prenom`, `categorie`, `code1`) VALUES
(1, 'durant', 'andre', 'a', '001',),
(2, 'dupont', 'Jean', 'b', '002'),
(3, 'martin', 'Elodie', 'c', '003'),
(4, 'blanc', 'Dominique', 'd', '004'),
(5, 'rouge', 'Monique', 'e', '005'),
(6, 'vert', 'Francois', 'b', '006'),
(7, 'bleu', 'Fabien', 'a',  '007'),
(8, 'noir', 'Jean', 'a', '008'),
(9, 'blanc', 'Marie', 'c', '009'),




Code: Tout sélectionner
INSERT INTO `table2` (`id2`, `groupe`, `service`, `code2`) VALUES
(1, '1', 'direction', '001'),
(2, '1', 'direction', '002'),
(3, '1', 'secrétariat', '003'),
(4, '2', 'technicien', '004'),
(5, '2', 'unité', '005'),
(6, '2', 'technicien', '006'),
(7, '3', 'secrétariat', '007'),
(8, '3', 'encadrement', '008'),
(9, '3', 'direction', '009'),



je voudrais arriver à un résultat similaire à celui là
tout en observant que la 1ere ligne indique bien un service dont
personnes n'est affecté !
et le but ici est de regrouper les services identiques
en additionnant la valeur du même service


Code: Tout sélectionner
id2    service           cat
18    direction           0
19    secrétariat        15
20    technicien         46
21    technicien          5
22    unité              19
23    unité               1
24    Bureau Central      1
25    Bureau Central      2
26    encadrement         2
27    encadrement         4




merci pour ton aide :)
athome
Visiteur
Visiteur
 
Messages: 9
Inscription: 20 Juil 2010 11:02
 

Re: [MySQL] Un GROUP BY dans un COUNT

Message le 22 Juil 2010 07:30

Désolé j'étais pas dispo hier, je regarde donc ça ce matin...

Le résultat que tu veux obtenir c'est donc ça ?

athome a écrit:
Code: Tout sélectionner
id2 service cat
18 direction 0
19 secrétariat 15
20 technicien 46
21 technicien 5
22 unité 19
23 unité 1
24 Bureau Central 1
25 Bureau Central 2
26 encadrement 2
27 encadrement 4


Ou tu veux que la ligne technicien soit égal 51, bureau centrale à 3, encadrement 6 ?
Avatar de l'utilisateur
webmaster
Big Boss
Big Boss
 
Messages: 4909
Inscription: 11 Jan 2002 01:00
 

Re: [MySQL] Un GROUP BY dans un COUNT

Message le 22 Juil 2010 08:33

oui c'est ca je veux regrouper les service en additionnant ;)
et aussi afficher la première ligne "direction 0"
donc en gros, meme si un service est égal à zéro
je veux le lister quand meme
athome
Visiteur
Visiteur
 
Messages: 9
Inscription: 20 Juil 2010 11:02
 

Re: [MySQL] Un GROUP BY dans un COUNT

Message le 22 Juil 2010 16:24

Donc en appliquant larquète sql suivante

Code: Tout sélectionner
SELECT t2.id2, service, (

SELECT COUNT( categorie )
FROM table1
WHERE categorie = 'a'
AND code1 = code2
) AS cat
FROM table2 t2
WHERE t2.groupe = '1'
GROUP BY t2.service
ORDER BY t2.id2 ASC


aux données que tu as fournies j'obtiens ceci...

Code: Tout sélectionner
1 direction 1
3 secrétariat 0


Donc j'arrive pas à reproduire ton problème (je pense) parce qu'il y a pas assez de données. Il faudrait que tu me fournisses bcp plus de données (insert) afin que la requète donne un mauvais résultat. Je pourrai alors la modifier pour que ça colle mais là ton
Code: Tout sélectionner
categorie = 'a' AND code1 = code2
est bcp trop restrictif cela rend inutile 3/4 des 9 lignes que m'as fourni dans chaque table... Désolé de te renvoyer encore la balle mais il faut absolument que mysql me sorte un mauvais résultat pour que sache vers quoi aller. Sachant que mois je sais pas ce qu'est code1, code 2 etc... Je ne peux donc me fier qu'au résulta attendu et donc son décallage avec le résultat réel... bref donne mùoi des données qui donnent un mauvais résultat avec cette requète et je corrigerai pour que ça marche...
Avatar de l'utilisateur
webmaster
Big Boss
Big Boss
 
Messages: 4909
Inscription: 11 Jan 2002 01:00
 

Re: [MySQL] Un GROUP BY dans un COUNT

Message le 22 Juil 2010 17:18

merci de te pencher sur mon cas,
alors j'ai modifié certaine chose pour que les erreurs soient plus flagrantes ;)

Code: Tout sélectionner
CREATE TABLE IF NOT EXISTS `table1` (
  `id1` int(11) NOT NULL auto_increment,
  `nom` text NOT NULL,
  `prenom` text NOT NULL,
  `categorie` text NOT NULL,
  `code1` text NOT NULL,
  PRIMARY KEY  (`id1`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

--
-- Contenu de la table `table1`
--

INSERT INTO `table1` (`id1`, `nom`, `prenom`, `categorie`, `code1`) VALUES
(1, 'durant', 'andre', 'a', '001'),
(2, 'dupont', 'Jean', 'b', '002'),
(3, 'martin', 'Elodie', 'c', '003'),
(4, 'blanc', 'Dominique', 'b', '004'),
(6, 'vert', 'Francois', 'b', '006'),
(7, 'bleu', 'Fabien', 'a', '007'),
(8, 'noir', 'Jean', 'a', '008'),
(9, 'blanc', 'Marie', 'c', '009');


Code: Tout sélectionner
CREATE TABLE IF NOT EXISTS `table2` (
  `id2` int(11) NOT NULL auto_increment,
  `groupe` text NOT NULL,
  `service` text NOT NULL,
  `code2` text NOT NULL,
  PRIMARY KEY  (`id2`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

--
-- Contenu de la table `table2`
--

INSERT INTO `table2` (`id2`, `groupe`, `service`, `code2`) VALUES
(1, '1', 'direction', '001'),
(2, '1', 'direction', '002'),
(3, '1', 'secrétariat', '003'),
(4, '1', 'technicien', '004'),
(5, '1', 'unité', '005'),
(6, '1', 'technicien', '006'),
(7, '1', 'secrétariat', '007'),
(8, '1', 'encadrement', '008'),
(9, '1', 'direction', '009');


et ta requete

Code: Tout sélectionner
SELECT t2.id2, service, (
SELECT COUNT( categorie )
FROM table1
WHERE categorie IN ('a' , 'b' , 'c')
AND code1 = code2
) AS cat
FROM table2 t2
WHERE t2.groupe = '1'
GROUP BY t2.service
ORDER BY t2.id2 ASC


résultat
Code: Tout sélectionner
id2    service    cat
1    direction     1
3    secrétariat   1
4    technicien    1
5    unité         0
8    encadrement   1


donc on s'apercoit bien que le nombre total de personnes (8)
ne sont pas tous compter
par contre le 'service' unité est bien présent avec 0 effectif

cela devrait etre

Code: Tout sélectionner
id2    service    cat
1    direction     3
3    secrétariat   2
4    technicien    2
5    unité         0
8    encadrement   1


j'espère avoir donner plus d'information et que celà t'aide ;)
athome
Visiteur
Visiteur
 
Messages: 9
Inscription: 20 Juil 2010 11:02
 

Re: [MySQL] Un GROUP BY dans un COUNT

Message le 23 Juil 2010 18:13

Pour l'instant j'ai un peu mieux mais j'arrive pas à compter ce qui n'existe pas... Docn je coince encore sur unité...

Voilà ce que ça donne :

Code: Tout sélectionner
SELECT t2.id2, t2.service, COUNT( t1.categorie )
FROM table2 t2, table1 t1
WHERE t2.groupe = '1'
AND t2.code2 = t1.code1
GROUP BY T2.service
ORDER BY t2.id2 ASC
Avatar de l'utilisateur
webmaster
Big Boss
Big Boss
 
Messages: 4909
Inscription: 11 Jan 2002 01:00
 

Re: [MySQL] Un GROUP BY dans un COUNT

Message le 23 Juil 2010 18:56

salut, merci de te pencher sur mon cas :)

je pense etre sur le bon chemin avec ceci
il faut encore que je teste, mais ca a l'air pas mal

Code: Tout sélectionner
select T2.service, COUNT(T1.categorie) AS cat
from table2 T2
left join table1 T1 on T1.code1 = T2.code2
WHERE (categorie IN ('a','b','c') OR categorie IS NULL)
  AND t2.groupe='1'
group by T2.service
ORDER BY t2.id2 ASC


&

Code: Tout sélectionner
select T2.service, COUNT(T1.categorie) AS cat
from table2 T2
left join table1 T1 on T1.code1 = T2.code2 AND categorie IN ('a','b','c')
WHERE t2.groupe='1'
group by T2.service
ORDER BY t2.id2 ASC
athome
Visiteur
Visiteur
 
Messages: 9
Inscription: 20 Juil 2010 11:02
 

Re: [MySQL] Un GROUP BY dans un COUNT

Message le 23 Juil 2010 19:27

La première semble bien fonctionner non ?
Avatar de l'utilisateur
webmaster
Big Boss
Big Boss
 
Messages: 4909
Inscription: 11 Jan 2002 01:00
 

Re: [MySQL] Un GROUP BY dans un COUNT

Message le 23 Juil 2010 20:22

exact mais j'ai un faible pour la deuxième qui fonctionne aussi !
athome
Visiteur
Visiteur
 
Messages: 9
Inscription: 20 Juil 2010 11:02
 

Re: [MySQL] Un GROUP BY dans un COUNT

Message le 23 Juil 2010 21:26

Alors c'est parfait :wink:
Avatar de l'utilisateur
webmaster
Big Boss
Big Boss
 
Messages: 4909
Inscription: 11 Jan 2002 01:00
 



Sujets similaires

Message Forum Bases de données MySQL Problème localhost sur server
Bonjour à tous et à touteJe suis en train d'essayer de configurer un server en local pour hébérger mon site wordpress avant de le mettre en prod.J'ai un problème avec xampp mon server appache et activé sur le port 8090 et mon mysql sur le port 3306, dès que je tape localhost:8090 j'accède bien à mon ...
Réponses: 1

Message cpu "group 0 / group1", rendering 3d
Bonjour a tous !Alors voila, je viens de changer de processeurs sur une carte mère dual cpu (ep2c612), pour faire du rendu 3d sur le couple maya/renderman.J'avais deux e5 2686 v3 qui n'étaient pas compatible a 100% avec ma CM, je devais désactiver l'hyperthreading pour que les deux processeurs soien ...
Réponses: 2

Message Créer un espace membre, convertir mysql postgresql
Bonjour à tous, Dans le but de créer un site internet, je dois réaliser un espace membre.Voilà notre table membre en SQL :Code: Tout sélectionnerCREATE TABLE membre (   id int(11) NOT NULL auto_increment,   login text NOT NULL,   pass_md5 text NOT NULL,   PRIM ...
Réponses: 1

Message conflit à l'installation de mysql-devel
Bonjour,Je travail sur une distribution CentOS 5.10 sur laquelle est installé Centreon enterprise server.Afin de tester un module d'autodiscovery j'ai besoin d'installer mysql-devel, cependant je rencontre un problème au cours de l'installation et je ne sais pas comment le résoudre.Il me dit que plu ...
Réponses: 2

Message Xampp - bouton stop Apache et MySql can't stop
Bonjour à toutes et à tous,Tout juste inscrit sur le forum j'espère que mon niveau moyen en informatique ne vous gênera pas trop en tout cas je suis plein de curiosité et j'ai 1001 choses à apprendre (j'espère déjà que je suis sur le bon forum)C'est partit :Je cherche à faire fonctionner un serv ...
Réponses: 1

Message Probleme de requête MySql blob
Bonjour à tous,Voila j'ai une base de données dans laquelle j'ai plusieurs tables dont une qui comporte champ BLOB (image)Je sais bien charger l'image de ma table dans mon programme via une pictureBox via se code :Code: Tout sélectionnerDictionary<string, object> EnregChassis = Program.Connexi ...
Réponses: 0

Message comment je convertie ma base h2 en mysql
Bonjour, J'ai une base de donnée H2 et je souhaite la convertir en Base Mysql, existe t-il un logiciel pour convertir simplement ce type de fichier en mysql où une manip COMPRÉHENSIBLE svp. merci d'avance.
Réponses: 1


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités


.: Nous contacter :: Flux RSS :: Données personnelles :.