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 de comptage d'entrées uniques


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut Requête de comptage d'entrées uniques
    Hello,

    Soit le schema simple suivant:
    Object(obj_id)
    Owner(own_id)
    ObjectOwner(obj_id, own_id)

    Je souhaite compter simplement, pour un owner donné, le nombre d'objet qu'il est le seul a posséder.

    J'ai donc la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT COUNT(P1.obj_id), P1.obj_id, P1.own_id 
    FROM ObjectOwner P1, ObjectOwner P2 
        WHERE P1.own_id=2 and P1.obj_id=P2.obj_id 
        GROUP BY P1.obj_id;
    Cette requête me renvoi une table avec la liste d'object ID associé au provider ainsi que le nombre d'instance de chaque objets dans la table ObjectOwner. Il me reste alors à parcourir le résultat et compter le nombre d'objet n'ayant qu'une instance dans la table.

    Ma question est: est-il possible selon vous d'améliorer cette requête, et surtout, d'obtenir dirèctement le nombre d'objet unique ?

    J'ai peu l'habitude du SQL et des requêtes, et je préssent fortement que ma requête n'est pas optimisée...

    Merci d'avance de vos conseils.

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT p1.own_id, COUNT(*) as cnt
    FROM ObjectOwner p1
    JOIN (
    	SELECT obj_id
    	FROM ObjectOwner oo
    	GROUP BY obj_id
    	HAVING COUNT(*) = 1
    	) t ON p1.obj_id = t.obj_id
    GROUP BY p1.own_id
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  3. #3
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Bonjour,

    Citation Envoyé par vinzzzz Voir le message
    Soit le schema simple suivant:
    Object(obj_id)
    Owner(own_id)
    ObjectOwner(obj_id, own_id)

    Je souhaite compter simplement, pour un owner donné, le nombre d'objet qu'il est le seul a posséder.
    Vous pouvez le faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT Count(*) AS nbObjet
    FROM ObjectOwner AS a
    WHERE own_id = 2
      AND NOT EXISTS (
        SELECT *
        FROM ObjectOwner AS b
        WHERE b.own_id <> a.own_id
          AND b.obj_id = a.obj_id )

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Merci de vos réponses

    Je vais tester les deux requetes sur une grosse base et voir laquelle tourne le plus rapidement.

    Merci encore!

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

Discussions similaires

  1. Requête Vrai-faux avec "ENTRE"
    Par mooh91 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/07/2007, 13h29
  2. Requète: recherche d'écarts entre dates de commande
    Par alexandre.babey dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/05/2007, 21h12
  3. Réponses: 3
    Dernier message: 22/04/2007, 08h39
  4. Requête de comptage. Problème de mise en forme
    Par ksper92 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/12/2006, 15h17
  5. Requête SQL avec une réponse unique
    Par Glutinus dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/07/2005, 16h35

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