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 :

Requête SQL difficile


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Requête SQL difficile
    Bonjour,

    je dois écrire une requête sql sur une table à deux colonnes ( mais la requête est complexe pour mon niveau), je m'explique :

    j'ai 2 colonnes Id_Produit et Id_Client ( un client achète un ou plusieurs produits..et un produit est acheté par un ou plusieurs clients).

    je souhaite avoir : pour chaque Id_Produit, le nombre de client qui ont acheté uniquement ce produit et pas du tout les autres.

    Merci bien d'avance

    Cordialement

    Aziz

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Comme plein de discussions (hier par exemple).
    Il serait judicieux avant de poster une nouvelle discussion de lire les cours et tutoriaux disponibles sur le site.

    Ci joint les liens fournis par Punkoff
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    Bonjour,


    Quel est le SGBD ?
    Cordialement.

  4. #4
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    avoir comprendre MERISE d'abord
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    re-Bonjour,

    il s'agit du SGBD oracle.

    Merci ORA-007 :-)

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par WIN01 Voir le message
    j'ai 2 colonnes Id_Produit et Id_Client ( un client achete un ou plusieurs produits..et un produit est acheté par un ou plusieurs clients).

    je souhaite avoir : pour chaque Id_Produit, le nombre de client qui ont acheté uniquement ce produit [U]et pas dutout les autres[/U
    Jeu d'essais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE T
    (Id_Produit INT,
     Id_Client  INT)
    Solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    WITH T0 AS
    (
    SELECT Id_Client, Id_Produit  
    FROM   T AS T1
    WHERE  Id_Produit  = ??? --> n° du produit visé
      AND NOT EXIST(SELECT 0
                    FROM   T AS T2
                    WHERE  T1.Id_Client  = T2.Id_Client  
                      AND  T1.(Id_Produit <> T2.(Id_Produit))
    SELECT T0.*, COUNT(*) AS NOMBRE_PRODUITS
    FROM   T0
           INNER JOIN T
                 ON T0.Id_Produit = T.Id_Produit 
                    AND T0.Id_Client  = T.Id_Client

    Et pour un cours sur SQL : mon site + mon bouquin !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    Bonjour,

    dans ce cas là alors :

    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
     
    WITH ACHAT AS
    (
    SELECT 1 as ID_CLIENT, 1 AS ID_PRODUIT FROM DUAL UNION ALL
    SELECT 1             , 2               FROM DUAL UNION ALL
    SELECT 2             , 1               FROM DUAL UNION ALL
    SELECT 3             , 1               FROM DUAL
    )
    SELECT COUNT(t1.ID_CLIENT)
    FROM   ACHAT t1
    WHERE  1=1
    AND    t1.ID_PRODUIT = 1
    AND    NOT EXISTS (
                      SELECT 1
                      FROM ACHAT t2 
                      WHERE t2.ID_PRODUIT <> t1.ID_PRODUIT
                      AND   t2.ID_CLIENT  = t1.ID_CLIENT
                      )
    ;
    Cordialement.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Merci bien Grégoire.

    cela renvoie bien pour chaque Id_Produit le nombre de clients ayant acheté uniquement ce produit?

    je n'ai pas encore eu les résultats des tests car c'est pour un ami en stage (débutant sur SQL.. ), je vais lui envoyer la requête.

    Encore une fois merci.

  9. #9
    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
    Vos requêtes ne répondent pas au besoin !
    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
    With SR1 as
    (
    select 1 as id_produit, 1 as id_client from dual union all
    select 2              , 1              from dual union all
    select 2              , 2              from dual union all
    select 2              , 3              from dual union all
    select 3              , 3              from dual union all
    select 4              , 4              from dual union all
    select 5              , 1              from dual union all
    select 5              , 5              from dual union all
    select 5              , 6              from dual
    )
      ,  SR2 as
    (
      select id_client, min(id_produit) as id_produit
        from SR1
    group by id_client
      having count(distinct id_produit) = 1
    )
      select prd.id_produit, count(SR2.id_client) as nb_clients_unique
        from SR2
             right outer join (select distinct id_produit from SR1) prd
               on prd.id_produit = SR2.id_produit
    group by prd.id_produit
    order by prd.id_produit asc;
     
    ID_PRODUIT NB_CLIENTS_UNIQUE
    ---------- -----------------
             1                 0
             2                 1
             3                 0
             4                 1
             5                 2

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Merci bien Waldar : )

Discussions similaires

  1. Requête SQL très difficile
    Par mistergamer dans le forum Langage SQL
    Réponses: 9
    Dernier message: 26/07/2014, 14h09
  2. [MySQL-5.6] requête SQL difficile à formuler
    Par caema dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/01/2014, 23h01
  3. Requête sql pas si difficile au final
    Par nicocotiers dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/09/2012, 11h30
  4. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  5. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/02/2003, 16h44

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