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 :

Select distinct et count


Sujet :

Langage SQL

  1. #1
    Membre éclairé Avatar de Basicnav
    Profil pro
    Inscrit en
    Février 2008
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2008
    Messages : 245
    Par défaut Select distinct et count
    Bonjour à tous,

    je cherche mais ne trouve pas le script sur un select.

    Voilà, j'ai une table avec trois colonnes qui m'interressent.
    ope_maj, emp_prise, et zone_mvt_prise

    De ses trois colonnes, j'ai besoin de créer un tableau avec 4 données qui me donnent par ope_maj, le nombre de emp_prise par zone_mvt_prise ET (c'est là mon problème) le nombre distinct de emp_prise toujours par ope_maj...

    Voilà ce que j'ai comme script avec son résultat en dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ope_maj, zone_mvt_prise, emp_prise from (SELECT ope_maj, zone_mvt_prise, emp_prise FROM lig_tour WHERE trunc(dat_maj) = trunc(sysdate-3))
    ope_maj zone_mvt_prise emp_prise
    D421 PREPARATEUR 441PA2800101A
    D421 PREPARATEUR 441PA2803001D
    D300 PREPARATEUR 441PP0306002
    D300 PREPARATEUR 441PP0306002
    D300 PREPARATEUR 441PP0307701
    D300 PREPARATEUR 441PP0701304
    D300 PREPARATEUR 441PP1402404D
    D300 PAL 441PP0701304
    D300 PAL 441PP0701304

    De ce tableau et script, comment sortir le résultat suivant :

    ope_maj zone_mvt_prise count(emp_prise) count distinct emp_prise)
    D300 PREPARATEUR 5 4
    D300 PAL 2 1
    D421 PREPARATEUR 2 2

    Je mélange mes pinceaux dans les count et distinct sans jamais obtenir le bon résultat quand ce n'est pas des erreurs...

    Avez-vous une idée ?

    merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 144
    Par défaut
    Il manque juste la clause GROUP BY.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  ope_maj
        ,   zone_mvt_prise
        ,   COUNT(emp_prise)
        ,   COUNT(DISTINCT emp_prise)
    FROM    lig_tour 
    WHERE   TRUNC(dat_maj) = TRUNC(SYSDATE) - 3
    GROUP BY ope_maj
        ,   zone_mvt_prise
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 185
    Par défaut
    Bonjour,

    Il te manquait une parenthèse et la clause group by. De plus, il faut généralement éviter d'appliquer une fonction de conversion sur les colonnes dans une clause WHERE car ça peut avoir pour effet de ne pas utiliser un index régulier sur ces colonnes. Par exemple dans ta requête il vaut mieux écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE dat_maj >= trunc(sysdate-3) AND date_maj < trunc(sysdate-2)

  4. #4
    Membre éclairé Avatar de Basicnav
    Profil pro
    Inscrit en
    Février 2008
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2008
    Messages : 245
    Par défaut
    Bonjour à tous les deux !

    Merci, effectivement avec le group by j'ai le résultat attendu.

    en revanche j'ai un peu de mal à comprendre l'index non régulier dans ton explication.

    Dans tous les cas merci à vous deux.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 042
    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 : 22 042
    Billets dans le blog
    6
    Par défaut
    un index c'est comme un dictionnaire. Dans un dictionnaire figurent les mots bruts et l'on peut entreprendre une recherche rapide par dichotomie. Si maintenant vous chercher une transformation du mot, par exemple un mot tronqué, le dictionnaire ne sera plus efficace, il faudra lire tous les mots.

    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/ * * * * *

Discussions similaires

  1. Selection multiple et count
    Par xxkirastarothxx dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 19/11/2009, 13h43
  2. requete de select avec un count trop longue
    Par Phiss dans le forum ASP
    Réponses: 8
    Dernier message: 21/05/2008, 19h44
  3. [COUNT] select ... from ... where count !
    Par tmcgrady dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/11/2007, 17h29
  4. select avec plusieurs count as
    Par esojrehcir dans le forum Langage SQL
    Réponses: 9
    Dernier message: 23/10/2007, 17h05
  5. Réponses: 8
    Dernier message: 16/02/2007, 12h53

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