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 :

COUNT avec des dates sur valeurs non dédoublonnées ?


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut COUNT avec des dates sur valeurs non dédoublonnées ?
    Bonsoir

    J'ai voulu testé cette requête sur MySQL pour compter le nombre de commande par jour depuis un date données. Attention ici je compte sur le numéro de la commande qui se répète plusieurs fois car il y a plusieurs articles par commande :

    Ne me demandé pas pourquoi je prend le numéro de commande , c'est une table faite ainsi pour des vérifications ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT "ma_date" , COUNT ("num_commande")
    FROM "ma_table"
    WHERE "ma_date">= AAAAMMJJ
    GROUP BY "ma_date"
    HAVING COUNT ("num_commande")
    ORDER BY "ma_date" ;
    Le COUNT ("num_commande") doit renvoyer en somme le nombre d'articles et non le nombre de commandes . Donc pas besoin d'un COUNT DISTINCT ici .

    Problème ici le HAVING COUNT ("num_commande") n'est pas reconnue par le compilateur .

    Merci de m'aiguiller
    Dernière modification par Waldar ; 04/09/2014 à 19h15. Motif: Balise code (#)

  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 : 47
    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
    La clause HAVING permet de poser des filtres après l'opération d'agrégat. Une espèce de WHERE tardif si vous préférez.
    Ce que vous avez écrit n'est pas une expression évaluable.

    Supprimez simplement votre clause HAVING.

  3. #3
    Membre extrêmement actif
    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
    Billets dans le blog
    6
    Par défaut
    tanaka59; tu as oublié de mettre la condition dans la clauseexemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
     
    HAVING COUNT ("num_commande")> 2
    ...

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 197
    Billets dans le blog
    1
    Par défaut
    S'il n'y a pas besoin de DISTINCT, au lieu de compter les valeurs d'une colonne, comptez le nombre de lignes : c'est bien plus rapide.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT ma_date , COUNT(*)
    FROM ma_table
    WHERE ma_date >= AAAAMMJJ
    GROUP BY ma_date
    ORDER BY ma_date;

    PS : Le "ORDER BY ma_date" est (d'un point de vue purement technique) redondant avec le "GROUP BY ma_date", qui, après vérification du comportement de votre SGBD, pourra être supprimé.
    En effet, le GROUP BY, d'après la norme SQL, n'a aucune incidence sur l'ordre des lignes retournées. En revanche, d'un point de vue technique, la plupart des SGBD vont au plus simple : le plus rapide pour dédoublonner des lignes, c'est avant tout de les trier, puis de ne retenir que les lignes dont la précédente n'a pas la même valeur. Il en résulte donc, dans la majorité des cas (mais ce n'est pas toujours le cas) un tri par la clause GROUP BY.

  5. #5
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonjour,

    C'est quand même dommage de ne pas lire tous les intervenants
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  6. #6
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Chtulus Voir le message
    Bonjour,

    C'est quand même dommage de ne pas lire tous les intervenants
    Euh... C'est à moi que s'adresse ce message ? (et surtout le -1 que j'aimerais bien voir justifié)

    Car ma réponse n'est en rien redondante avec ce qui a été dit, c'est un complément d'information.

    Et autant je suis tout à fait prêt à comprendre le -1 s'il porte sur mon conseil de virer le ORDER BY en présence d'un GROUP BY, mais à ce moment, il faut aller jusqu'au bout et dire pourquoi c'est mal, autant j'ai lu attentivement les réponses précédentes, et ma réponse n'est en rien redondante ou contradictoire avec ce qui a été dit plus haut.

  7. #7
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tanaka59 Voir le message
    Donc pas besoin d'un COUNT DISTINCT ici.
    Ouais, alors là faudra m'expliquer hein...

  8. #8
    Invité
    Invité(e)
    Par défaut
    On m a toujour dit que le count distinct n est pas possible directement dans le select. Il faudrait soit disant une sous requete pour faire le comptage. Je suis un peu perplexe sur la chose

  9. #9
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 197
    Billets dans le blog
    1
    Par défaut
    Le COUNT s'utilise de trois manières :
    - COUNT(*) => Compte TOUTES les lignes, y compris les doublons. Dans ce cas, pour des raisons de performances, on met toujours *, JAMAIS de nom de colonne, d'autant que le comportement n'est pas le même
    - COUNT(DISTINCT col) => Compte le nombre de valeurs distinctes d'une colonne donnée. Les valeurs NULL sont ignorées
    - COUNT(ALL col) ou COUNT(col) => Compte toutes les lignes où la colonne est non vide, doublons compris

    COUNT (tout comme les autres fonctions d'agrégat) porte toujours sur le jeu de résultat de la requête, jamais directement sur les données des tables.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonsoir

    Merci de vos retours.

    Je suis en train de procéder à des tests avec le count pour prendre la main sur la commande.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonsoir ,

    Voici un exemple de requête testée qui a marché

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE matabledesortie as 
     
    SELECT COUNT (DISTINCT(codemachintruc)) , datemachinchose
    FROM matablededepart
    WHERE datemachinchose BETWEEN date1 AND date2
    GROUP BY datemachinchose
    ORDER BY datemachinchose ;

    Merci des tuyaux

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 08/07/2014, 17h41
  2. [11gR2] Index cassé avec des heures sur des dates
    Par Golgotha dans le forum Oracle
    Réponses: 3
    Dernier message: 12/12/2013, 14h54
  3. Probleme sur order by avec des dates.
    Par Shandler dans le forum MySQL
    Réponses: 8
    Dernier message: 09/02/2009, 14h39
  4. Decode avec des dates pour calculer une valeur
    Par decisio dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/01/2009, 12h50

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