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 :

Comment faire cette requete ?


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 67
    Points : 42
    Points
    42
    Par défaut Comment faire cette requete ?
    Bonjour à tous,

    Je vous explique mon problème ... j'ai dans une base 3 champs "service1, service2 et service3". Je voudrais faire une requête me permettant d'avoir pour chacun des services le nombre d'occurrences existantes.

    J'ai fais ceci, mais (normal) ça ne fonctionne pas et je ne sais pas comment résoudre mon problème ... help please !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT service1,COUNT(*) FROM services WHERE adcountrylist="United Kingdom" GROUP BY service1 
    UNION 
    SELECT service2,COUNT(*) FROM services WHERE adcountrylist="United Kingdom" GROUP BY service2 
    UNION 
    SELECT service3,COUNT(*) FROM services WHERE adcountrylist="United Kingdom" GROUP BY service3
    Exemple de ma base

    Service1 | Service2 | Service3
    num1 | num2 |
    num2 | num3 | num4
    num3 | num1 |
    num4 | num1 | num2
    num2|

    Résultat souhaité :

    Service | Count
    num1 | 3
    num2 | 4
    num3 | 2
    num4 | 2


    D'avance, merci !

    Greg

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Je ferais quelquechose du style:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select idservice,sum(nombre) from(
    SELECT service1 as idservice,COUNT(*) as nombre FROM services WHERE adcountrylist="United Kingdom" GROUP BY service1 
    UNION ALL
    SELECT service2,COUNT(*) FROM services WHERE adcountrylist="United Kingdom" GROUP BY service2 
    UNION ALL
    SELECT service3,COUNT(*) FROM services WHERE adcountrylist="United Kingdom" GROUP BY service3
    )
    group by idservice

    Tatayo.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 33
    Points
    33
    Par défaut
    Essaie avec ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT service, SUM(nb) FROM(  
    SELECT service1 as service,COUNT(*) as nb FROM services WHERE adcountrylist="United Kingdom" GROUP BY service1
    UNION ALL
    SELECT service2 as service,COUNT(*) as nb FROM services WHERE adcountrylist="United Kingdom" GROUP BY service2
    UNION ALL
    SELECT service3 as service,COUNT(*) as nb FROM services WHERE adcountrylist="United Kingdom" GROUP BY service3
    ) GROUP BY service
    Il faut utiliser un UNION ALL, le UNION va faire un distinct sur les mêmes lignes.

    _____________________________

    http://seekaftersomething.over-blog.com/

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Je ne vois pas d'erreur dans votre début de requête hormis que vous devriez faire UNION ALL et non pas UNION.
    Ah si, on utilise des apostrophes pour délimiter du texte, pas des guillemets.

    Quel est votre SGBD ? Oracle 11g et SQL Server 2005+ supportent l'opérateur UNPIVOT qui permet de simplifier légèrement la syntaxe.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 67
    Points : 42
    Points
    42
    Par défaut
    Merci pour vos réponses si rapides !

    Par contre je rencontre un petit soucis en exécutant cette requête :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT idservice,sum(nombre) FROM(
    SELECT service1 AS idservice,COUNT(*) AS nombre FROM services WHERE adcountrylist="United Kingdom" GROUP BY service1 
    UNION ALL
    SELECT service2,COUNT(*) FROM services WHERE adcountrylist="United Kingdom" GROUP BY service2 
    UNION ALL
    SELECT service3,COUNT(*) FROM services WHERE adcountrylist="United Kingdom" GROUP BY service3 
    )
    GROUP BY idservice
    Le message d'erreur suivant apparaît : Every derived table must have its own alias

    Que faut-il faire ? Une meilleure imbrication ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 33
    Points
    33
    Par défaut
    Pour service2 et 3 il faut mettre l'alias sur le count.


  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Il faut peut-être aussi donner un alias à la sous-requête:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT idservice,sum(nombre) FROM(
    SELECT service1 AS idservice,COUNT(*) AS nombre FROM services WHERE adcountrylist='United Kingdom' GROUP BY service1 
    UNION ALL
    SELECT service2,COUNT(*) FROM services WHERE adcountrylist='United Kingdom' GROUP BY service2 
    UNION ALL
    SELECT service3,COUNT(*) FROM services WHERE adcountrylist='United Kingdom' GROUP BY service3 
    ) as total
    GROUP BY total.idservice

    Tatayo.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 67
    Points : 42
    Points
    42
    Par défaut
    Merci pour ta réponse mais j'ai toujours le même message d'erreur avec cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT idservice,sum(nombre) FROM(
    SELECT service1 AS idservice,COUNT(*) AS nombre FROM services WHERE adcountrylist="United Kingdom" GROUP BY service1 
    UNION ALL
    SELECT service2 AS idservice,COUNT(*) AS nombre FROM services WHERE adcountrylist="United Kingdom" GROUP BY service2 
    UNION ALL
    SELECT service3 AS idservice,COUNT(*) AS nombre FROM services WHERE adcountrylist="United Kingdom" GROUP BY service3 
    )
    GROUP BY idservice

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 67
    Points : 42
    Points
    42
    Par défaut
    Merci beaucoup tatayo !!!

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

Discussions similaires

  1. comment faire cette requete SQL en delphi
    Par rafikjka dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/01/2012, 15h42
  2. Comment faire cette requete
    Par karidrou dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/02/2011, 10h02
  3. Comment faire cette requete
    Par neeux dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/12/2008, 11h19
  4. [WD8] comment faire cette requete
    Par benga69 dans le forum WinDev
    Réponses: 2
    Dernier message: 18/08/2008, 12h39
  5. Je ne vois pas comment faire cette requete
    Par figatelliSTI dans le forum Langage SQL
    Réponses: 5
    Dernier message: 14/08/2008, 11h56

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