Suivez les fils RSS
 
Auteur
ffwrude
# 22 Mar 2010 - 11:06:04
Citer
Joli coup mon cher M.Boujenah
604 Posts
Salut les gens.

Imaginons que j'ai 6 enregistrements comme ceci dans une table :


Date id_client Agents
01/03/2010 1000 10
01/03/2010 1000 10
01/03/2010 1000 10
02/03/2010 2000 20
02/03/2010 3000 30
02/03/2010 3000 30


Ce que je voudrais obtenir est le nombre d'agent par client et par mois.
J'ai donc fait ca :


SELECT `date`,`id_client`,SUM(`Agents`) AS `nb_agents` FROM `table` WHERE `date` LIKE ('%/03/2010') GROUP BY `id_client`;


Mais j'obtient 110 alors que je voudrais obtenir 60 (C'est clair ?). DISTINCT ne m'aide pas vraiement (t'façon je crois que ca dédoublonne mais que ca select tout quand même).

Une idée ? Je suis preneur cligne

Rude
Modifié par ffwrude (22 Mar 2010 - 11:25)

Moi je suis né un Vendredÿ... Mais je crois que ça se voit ...

http://www.culturescroisees.com msn 
^
Heyoan
# 22 Mar 2010 - 11:18:57
Citer
Modérateur
8101 Posts
Hello Rude, smile

SELECT `id_client`, SUM(`Agents`) AS nb_agents FROM `table` WHERE `date` LIKE '2010-03%' GROUP BY `id_client`


^
ffwrude
# 22 Mar 2010 - 11:24:54
Citer
Joli coup mon cher M.Boujenah
604 Posts
Salut Heyoan.

Bah écoute ca ne fait pas ce que je veux avec ta requette il me donne toujours 110.

Et comme à chaque fois que je m'arrache les cheveux une heure et que je viens poster sur ALSA... Je trouve la soluce 10minutes plus tard.

La soluce =>


SELECT `date`,`id_client`,SUM(DISTINCT `Agents`) AS `nb_agents` FROM `table` WHERE `date` LIKE ('%/03/2010') GROUP BY `id_client`;


Moi je suis né un Vendredÿ... Mais je crois que ça se voit ...

http://www.culturescroisees.com msn 
^
Heyoan
# 22 Mar 2010 - 11:30:55
Citer
Modérateur
8101 Posts
Ben sauf que :

* si tu mets DISTINCT tu devrais perdre des enregistrements. rolleyes

* tu ne devrais pas sélectionner le champ date à moins de le rajouter dans la clause ORDER BY sinon il prend la première qu'il trouve et ça n'a donc pas beaucoup de sens (c'est vrai que dans ton exemple un client a toujours la même date de renseignée)

* je me trompe où tu as un champ date qui est en VARCHAR ? langue

Pour mon test (qui fonctionne avec ma requête) :
-- 
-- Structure de la table `table`
--

CREATE TABLE `table` (
`id` int(10) unsigned NOT NULL auto_increment,
`id_client` int(10) unsigned NOT NULL,
`date` date NOT NULL,
`Agents` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

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

INSERT INTO `table` (`id`, `id_client`, `date`, `Agents`) VALUES
(1, 1000, '2010-03-01', 10),
(2, 1000, '2010-03-01', 10),
(3, 1000, '2010-03-01', 10),
(4, 2000, '2010-03-02', 20),
(5, 3000, '2010-03-02', 30),
(6, 3000, '2010-03-02', 30);


^
ffwrude
# 22 Mar 2010 - 15:02:31
Citer
Joli coup mon cher M.Boujenah
604 Posts
Salut. J'ai largement simplifié la structure de la base mais en effet, la date sera toujours la m^me pour un client. Ce n'est pas un varchar. J'ai juste retapé à la main et écris la date dans le sens FR smile

Disons que sur chaque ligne à ses différences sauf au niveau de certains champs et c'est ceux la dont j'ai besoin. Le distinct ne me fait donc rien perdre mais c'est un peu compliqué à expliquer.

Merci en tout cas comme d'habitude de ton aide.

Rude

Moi je suis né un Vendredÿ... Mais je crois que ça se voit ...

http://www.culturescroisees.com msn 
^