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

Développement SQL Server Discussion :

utiliser count dans min


Sujet :

Développement SQL Server

  1. #1
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 14
    Par défaut utiliser count dans min
    Bonjour, voici la requête que j'ai passer et qui fonctionne tres bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(id) ,id_langue from projet group by id_langue
    et voici le resultas

    mon probleme c'est que je veux savoir le min du premier champ
    Savez-vous comment je peux faire ?

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 986
    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 986
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MIN(C) FROM (
    SELECT count(id) AS C, id_langue FROM projet GROUP BY id_langue
    ) AS T
    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/ * * * * *

  3. #3
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 14
    Par défaut
    merci

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Il y a une écriture plus courte et vachement plus marrante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT TOP(1) min(count(*)) over()
    FROM projet 
    GROUP BY id_langue
    Et y a plein de gens qui vous diront que ça ne peut pas marcher

    EDIT: Et pas plus tard que ci plus loin dessous ^^

  5. #5
    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
    Petite vision de la concurrence, Oracle Database supporte les agrégats imbriqués :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      SELECT min(count(id))
        FROM projet
    GROUP BY id_langue;

  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 986
    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 986
    Billets dans le blog
    6
    Par défaut
    Oui, comme Sybase, ais cela est totalement illogique !
    En effet sur quoi porte le GROUP BY ?
    Normalement il devrait porter sur les deux agrégats et la requête devrait être équivalente à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT count(id)
        FROM projet
    GROUP BY id_langue;
    Car un min appliqué au même groupage c'est un min sur une seule valeur !

    C'est pourquoi ceci est totalement interdit par la norme SQL !

    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
    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
    C'est une facilité d'écriture qui fait exactement la même chose que votre première requête.

    L'agrégat interne prend en compte le group by, l'agrégat externe tout ce résultat.

    C'est très peu utilisé, car d'une part méconnu et d'autre part ça prête plus à confusion qu'autre chose.

    Au niveau du plan d'exécution on économise juste l'étape de la création de la vue imbriquée.

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Petite vision de la concurrence, Oracle Database supporte les agrégats imbriqués :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      SELECT min(count(id))
        FROM projet
    GROUP BY id_langue;
    Le query que j'ai donné fonctionne tout à fait sur SQL Server

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 986
    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 986
    Billets dans le blog
    6
    Par défaut
    Désolé de vous contredire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT min(count(id))
    FROM projet
    GROUP BY id_langue;
    SQL Server 2008 :
    Msg*130, Niveau*15, État*1, Ligne*1
    Impossible d'exécuter une fonction d'agrégation sur une expression comportant un agrégat ou une sous-requête
    .

    SQL Server 2005 :
    Msg*130, Niveau*15, État*1, Ligne*1
    Impossible d'exécuter une fonction d'agrégation sur une expression comportant un agrégat ou une sous-requête.


    SQL Server 2000 :
    Serveur*: Msg 130, Niveau 15, État 1, Ligne 1
    Impossible d'exécuter une fonction d'agrégation sur une expression comportant un agrégat ou une sous-requête.


    MORALITÉ : faut pas abuser du jus de citron !

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

  10. #10
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Lol non non la requête ne fonctionne pas sur SQL Server..
    On a de jolies messages d'erreurs .. cf post de SQLPro

    Edit : Oui la requête que tu as donné TOI SergeJack elle fonctionne en effet

    ++

  11. #11
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    .. par contre la solution de SQLPro est plus performante si le nombre de projets est important par langue.

    ++

  12. #12
    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
    Citation Envoyé par Sergejack Voir le message
    EDIT: Et pas plus tard que ci plus loin dessous ^^
    Pas compris votre edit, où quelqu'un a dit que votre solution ne fonctionnait pas ?

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Pas compris votre edit, où quelqu'un a dit que votre solution ne fonctionnait pas ?
    Ben, Sql pro

    Sinon, il est vrai (et attendu) que ma requête est moins rapide, puisque je la construit sur des opérations pensés pour un usage bien plus large que celui que j'en fais.
    Néanmoins, la différence de performance est légère et donc, connaître cette formule pourrait bien servir (surtout si on veut tirer le réel parti d'un agrégat avec clause OVER).

  14. #14
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    En effet la différence n'est pas vraiment flagrante entre les 2 solutions.

    ++

  15. #15
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 986
    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 986
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Sergejack Voir le message
    Ben, Sql pro

    Sinon, il est vrai (et attendu) que ma requête est moins rapide, puisque je la construit sur des opérations pensés pour un usage bien plus large que celui que j'en fais.
    Néanmoins, la différence de performance est légère et donc, connaître cette formule pourrait bien servir (surtout si on veut tirer le réel parti d'un agrégat avec clause OVER).
    Je pense même qu'à terme elle risque d'être plus rapide car les opérateurs de fenêtrage, bien que mécaniquement plus gourmand, sont moins dépendant des lignes globalement manipulées. Mais dans un cas aussi léger il faudra attendre longtemps un énorme volume de ligne pour faire la réelle différence.

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

  16. #16
    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
    Citation Envoyé par Sergejack Voir le message
    Ben, Sql pro
    Regardez mieux

  17. #17
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Regardez mieux
    J'avais bien vu.
    Sql Pro avait même confondu votre query et le mien (sûr comme le citron que ça ne marchait pas).

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

Discussions similaires

  1. comment utiliser count(*) dans Run if
    Par zinabd dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 14/11/2011, 09h07
  2. comment utiliser SELECT COUNT dans ma fonction
    Par z_ahlam dans le forum Langage
    Réponses: 2
    Dernier message: 14/10/2009, 16h30
  3. utilisation de xsl:count dans un arbre à 3 noeuds
    Par meurdock56 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 10/07/2008, 15h58
  4. Réponses: 9
    Dernier message: 14/11/2007, 09h59
  5. Réponses: 2
    Dernier message: 20/12/2006, 16h12

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