IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Additionner deux count


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 26
    Par défaut Additionner deux count
    Bonjour, j'ai un problème que je n'arrive pas a résoudre, et j'espère que vous allez pouvoir m'aider =)

    j'ai cette rêquete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT delivery_title, count( delivery_title ) AS count_delivery_title FROM `orders` GROUP BY delivery_title LIMIT 0 , 30
                           UNION SELECT delivery_title, count( delivery_title ) AS count_delivery_title FROM `orders_archive` GROUP BY delivery_title LIMIT 0 , 30
    et elle m'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    delivery_title	count_delivery_title
     	                 34392
    Mlle	                 17
    Mme	                 149
    Mr	                 136
     	                 2572
    Mme	                 3846
    Mr	                 7926
    or moi je souhaite qu'il n'y est que quatres champs a savoir : "Mr","Mme","Mlle",""

    et que les deux "Mr" soit additionner, et de même pour les autres.

    De cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    delivery_title	count_delivery_title
     	                 36964
    Mlle	                 17
    Mme	                 3995
    Mr	                 8062
    Comment puis je procéder ? Merci.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il suffit de refaire une somme par-dessus votre requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      SELECT delivery_title
           , sum(count_delivery_title) as count_delivery_title
        FROM ( SELECT delivery_title
                    , count(*) AS count_delivery_title
                 FROM `orders`
             GROUP BY delivery_title
                UNION ALL
               SELECT delivery_title
                    , count(*) AS count_delivery_title
                 FROM `orders_archive`
             GROUP BY delivery_title ) AS Req
    GROUP BY delivery_title
    ORDER BY delivery_title ASC;

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 26
    Par défaut Re
    merci beaucoup sa fonctionne parfaitement.

    problème résolu

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 26
    Par défaut re: nouveau problême
    Bonjour, je re-post au même endroit car j'ai deux nouveaux le même problème mais de manière plus complexe.

    A la base j'ai ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    SELECT LEFT(delivery_postcode,2) AS dept,
    COUNT(delivery_postcode) AS deptcount
    FROM orders_archive
    WHERE (
    	(
    		(`status` = "validate") OR (`status` = "soumis") OR (`status` = "envoyea") OR (`status` = "envoyed")	
    	)
    	AND
    	(
    		LEFT(`delivery_postcode`,2)='09' OR 
    					LEFT(`delivery_postcode`,2)='12' OR 
    					LEFT(`delivery_postcode`,2)='31' OR 
    					LEFT(`delivery_postcode`,2)='32' OR 
    					LEFT(`delivery_postcode`,2)='46' OR 
    					LEFT(`delivery_postcode`,2)='65' OR 
    					LEFT(`delivery_postcode`,2)='81' OR 
    					LEFT(`delivery_postcode`,2)='82'
    	)
           )      
     
     
    GROUP BY dept
     
    UNION
     
    SELECT LEFT(delivery_postcode,2) AS dept,
    COUNT(delivery_postcode) AS deptcount
    FROM orders
    WHERE (
    	(
    		(`status` = "validate") OR (`status` = "soumis") OR (`status` = "envoyea") OR (`status` = "envoyed")
    	)
    	AND
    	(
    		LEFT(`delivery_postcode`,2)='09' OR 
    					LEFT(`delivery_postcode`,2)='12' OR 
    					LEFT(`delivery_postcode`,2)='31' OR 
    					LEFT(`delivery_postcode`,2)='32' OR 
    					LEFT(`delivery_postcode`,2)='46' OR 
    					LEFT(`delivery_postcode`,2)='65' OR 
    					LEFT(`delivery_postcode`,2)='81' OR 
    					LEFT(`delivery_postcode`,2)='82'
    	)
           ) 
     
    GROUP BY dept
    Donc même problème ><

    j'ai essayé ceci mais en vain :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    SELECT LEFT(delivery_postcode,2), SUM (deptcount) AS deptcount
    FROM (
    		SELECT LEFT(delivery_postcode,2), COUNT(*) AS deptcount
    		FROM orders_archive
    		WHERE (
    				(
    					(`status` = "validate") OR (`status` = "soumis") OR (`status` = "envoyea") OR (`status` = "envoyed")	
    				)
    				AND
    				(
    					LEFT(`delivery_postcode`,2)='09' OR 
    					LEFT(`delivery_postcode`,2)='12' OR 
    					LEFT(`delivery_postcode`,2)='31' OR 
    					LEFT(`delivery_postcode`,2)='32' OR 
    					LEFT(`delivery_postcode`,2)='46' OR 
    					LEFT(`delivery_postcode`,2)='65' OR 
    					LEFT(`delivery_postcode`,2)='81' OR 
    					LEFT(`delivery_postcode`,2)='82'
    				)
    			)      
     
     
    		GROUP BY LEFT(delivery_postcode,2)
     
    UNION ALL
     
    		SELECT LEFT(delivery_postcode,2), COUNT(*) AS deptcount
    		FROM orders
    		WHERE (
    				(
    					(`status` = "validate") OR (`status` = "soumis") OR (`status` = "envoyea") OR (`status` = "envoyed")	
    				)
    				AND
    				(
    					LEFT(`delivery_postcode`,2)='09' OR 
    					LEFT(`delivery_postcode`,2)='12' OR 
    					LEFT(`delivery_postcode`,2)='31' OR 
    					LEFT(`delivery_postcode`,2)='32' OR 
    					LEFT(`delivery_postcode`,2)='46' OR 
    					LEFT(`delivery_postcode`,2)='65' OR 
    					LEFT(`delivery_postcode`,2)='81' OR 
    					LEFT(`delivery_postcode`,2)='82'
    				)
    				) 
     
    		GROUP BY LEFT(delivery_postcode,2)
     
    		) AS total
    GROUP BY LEFT(delivery_postcode,2)
    ORDER BY LEFT(delivery_postcode,2) ASC;
    Est ce que quelqu'un vois ou est le problème ? Merci d'avance.

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 199
    Billets dans le blog
    1
    Par défaut
    Il faut aliaser les colonnes dans la sous-requête.

    Et appeler les alias dans la requête appelante.

    Ici, vous faites dans la requête appelante un "left()" sur une colonne qui n'est pas retournée par la requête imbriquée.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 26
    Par défaut Re
    Euh aliaser ? C'est a dire ?

    Pouvez vous m'expliquer plus précisément s'il vous plait, je débute en SQL.

    Merci.

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Au passage vous devriez vous intéressez à l'opérateur IN.
    Intrinsèquement, ça ne va rien changer à la performance, par contre ça facilite la lecture et donc la maintenabilité de la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    (`status` = "validate") OR (`status` = "soumis") OR (`status` = "envoyea") OR (`status` = "envoyed")	
    	)
    	AND
    	(
    		LEFT(`delivery_postcode`,2)='09' OR 
    					LEFT(`delivery_postcode`,2)='12' OR 
    					LEFT(`delivery_postcode`,2)='31' OR 
    					LEFT(`delivery_postcode`,2)='32' OR 
    					LEFT(`delivery_postcode`,2)='46' OR 
    					LEFT(`delivery_postcode`,2)='65' OR 
    					LEFT(`delivery_postcode`,2)='81' OR 
    					LEFT(`delivery_postcode`,2)='82'
    	)
    Devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        status in ('validate', 'soumis', 'envoyea', 'envoyed')
    AND LEFT(delivery_postcode, 2) in ('09', '12', '31', '32', '46', '65', '81', '82')

  8. #8
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 199
    Billets dans le blog
    1
    Par défaut
    Et si je peux me permettre...

    - IN c'est mieux que des OR

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    SELECT dept, SUM (deptcount) AS deptcount
    FROM (
    		SELECT LEFT(delivery_postcode,2) dept, COUNT(*) AS deptcount
    		FROM orders_archive
    		WHERE status in ('validate', 'soumis', 'envoyea', 'envoyed')	
    		AND LEFT(delivery_postcode,2) in ('09', '12', '31', '32', '46', '65', '81', '82')
    		GROUP BY LEFT(delivery_postcode,2)
    UNION ALL
     
    		SELECT LEFT(delivery_postcode,2), COUNT(*) AS deptcount
    		FROM orders
    		WHERE status in ('validate', 'soumis', 'envoyea', 'envoyed')		
    		AND LEFT(delivery_postcode,2) in ('09', '12', '31', '32', '46', '65', '81', '82')
    		GROUP BY LEFT(delivery_postcode,2)
    ) AS total
    GROUP BY dept
    ORDER BY dep ASC;

    Ou même :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    SELECT dept, SUM (deptcount) AS deptcount
    FROM (
    		SELECT dept, COUNT(*) AS deptcount
    		FROM (select LEFT(delivery_postcode,2), status from orders_archive)
    		WHERE status in ('validate', 'soumis', 'envoyea', 'envoyed')	
    		AND dept in ('09', '12', '31', '32', '46', '65', '81', '82')
    		GROUP BY dept
    UNION ALL
     
    		SELECT dept, COUNT(*) AS deptcount
    		FROM (select LEFT(delivery_postcode,2), status from orders)
    		WHERE status in ('validate', 'soumis', 'envoyea', 'envoyed')		
    		AND dept in ('09', '12', '31', '32', '46', '65', '81', '82')
    		GROUP BY dept
    ) AS total
    GROUP BY dept
    ORDER BY dep ASC;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Requete] Deux count dans une requete
    Par wperezrobles dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/10/2006, 09h17
  2. Additionner deux champs dans une requête
    Par eddyG dans le forum Access
    Réponses: 5
    Dernier message: 30/05/2006, 18h00
  3. EXCEL : Additionner deux groupes de lignes
    Par repié dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/12/2005, 20h59
  4. problème requete sql fusion de deux count
    Par TuxP dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/12/2005, 15h15
  5. Additionner deux variables....
    Par Guillaume602 dans le forum Débuter
    Réponses: 5
    Dernier message: 16/11/2005, 15h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo