8791 sujets

Développement web côté serveur, CMS

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 Smiley cligne

Rude
Modifié par ffwrude (22 Mar 2010 - 11:25)
Hello Rude, Smiley smile

SELECT `id_client`, SUM(`Agents`) AS nb_agents FROM `table` WHERE `date` LIKE '2010-03%' GROUP BY `id_client`
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`;
Ben sauf que :

* si tu mets DISTINCT tu devrais perdre des enregistrements. Smiley 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 ? Smiley 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);
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 Smiley 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