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 :

Requete SQL Optimiser Compteur


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Par défaut Requete SQL Optimiser Compteur
    Bonjour, voici mon problème

    Je voudrais avoir un compteur calculé en groupant deux colonnes mais je veux avoir le détail pour chaque ligne

    Un exemple semble plus parlant:
    voici ma table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    id	name	periode		num
    1	test	periode 1	num 1
    2	test	periode 1	num 2
    3	test	periode 2	num 1
    4	test	periode 2	num 3
    avec la requête suivante j'obtiens le résultat qu'il me faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT
      t.name,
      t.periode,
      t.num,
      (SELECT
         COUNT(t1.num)
       FROM test t1
       WHERE t.name = t1.name
           AND t.periode = t1.periode
       GROUP BY t.name, t.periode) AS result
    FROM test t
    Ma question est de savoir s'il y a moyen d'optimiser cette requête ?

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Même avec l'exemple, j'ai du mal à comprendre !
    Citation Envoyé par tentos Voir le message
    Je voudrais avoir un compteur calculé en groupant deux colonnes mais je veux avoir le détail pour chaque ligne
    La requête ci-dessous va compter le nombre de lignes pour chaque couple (name, periode)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name, periode, COUNT(*) AS nbre
    FROM test
    GROUP BY name, periode
    Si tu veux le détail de chaque ligne, c'est à dire le num de chaque ligne en plus du couple (name, periode), le GROUP BY devient inutile !

    Si tu veux compter combien il y a de lignes par triplet (name, periode, num), alors voilà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name, periode, num, COUNT(*) AS nbre
    FROM test
    GROUP BY name, periode, num
    Si tu veux compter combien il y a de num distincts pour chaque couple (name, periode), alors voilà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name, periode, COUNT(DISTINCT num) AS nbre
    FROM test
    GROUP BY name, periode
    Si ce n'est toujours pas ça ben... explique mieux !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Par défaut
    Merci pour ta réponse mais je me suis mal exprimé

    voici le résultat que j'attends :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    name	periode		num	Compteur
    test	periode 1	num 1	2
    test	periode 1	num 2	2
    test	periode 2	num 1	2
    test	periode 2	num 3	2
    je veux afficher toutes mes lignes et pour chaque ligne je veux savoir combien de num j'ai pour un même "name" et une même "periode".

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Alors (vite fait) comme ça probablement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t.name, t.periode, t.num, tmp.nbre
    FROM test AS t
    INNER JOIN (
      SELECT name, periode, COUNT(DISTINCT num) AS nbre
      FROM test
      GROUP BY name, periode
    ) AS tmp ON t.name = tmp.name AND t.periode = tmp.periode
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Par défaut
    Parfait ça fonctionne, je vais faire des tests de performance sur les deux requêtes.

  6. #6
    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
    Si votre SGBD les supporte, l'utilisation d'une fonction de fenêtrage sera nettement plus performant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name, periode, num,
           count(*) over(partition by name, periode) as Compteur
      FROM test

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

Discussions similaires

  1. Requete SQL - Optimisation function avec nombreux parametres
    Par Gallinette59 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/12/2008, 23h55
  2. Optimisation de requete SQL
    Par dark_vidor dans le forum Requêtes
    Réponses: 12
    Dernier message: 15/01/2006, 20h40
  3. Optimiser une Requetes SQL sous ASP
    Par NeHuS dans le forum ASP
    Réponses: 8
    Dernier message: 18/04/2005, 16h26
  4. [PL/SQL] Optimisation requete SQL
    Par CDRIK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/10/2004, 09h52
  5. Optimisation requetes SQL
    Par joel90 dans le forum Administration
    Réponses: 18
    Dernier message: 15/05/2004, 21h45

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