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 MAX et COUNT


Sujet :

Langage SQL

  1. #1
    Membre du Club Avatar de mjs21
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 85
    Points : 59
    Points
    59
    Par défaut Requête MAX et COUNT
    Bonjour,

    Je ne parviens pas à écrire ma requête alors je me disais que vous pourriez m'aider.

    En faite, j'ai une table "Pret"(Pret_id, Pret_datedeb, Pret_datefin) et je voudrais selectionner le/les mois pour le(s)quel(s) il y a le plus de prêt pour une année donnée.

    Voici ce que j'ai dejà qui ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT MAX(nb) as maxi, MONTH(Pret_datedeb) as mois
    FROM Pret,
    	(
    		SELECT COUNT(Pret_id) as nb
    		FROM Pret 
    		WHERE YEAR(Pret_datedeb) = 2009
                    GROUP BY MONTH(Pret_datedeb)
    	) as e
    GROUP BY MONTH(Pret_datedeb)
    Merci de votre aide par avance !!

    Cordialement,

    Mjs21

  2. #2
    Membre habitué
    Avatar de flo.87
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 77
    Points : 132
    Points
    132
    Par défaut
    Quand tu dis que cela ne marche pas, est-ce que tu as une erreur SQL ou est-ce le résultat n'est pas correct ?

    Essaie une requête de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT MAX(e.nb) AS maxi, e.mois
    FROM (
      SELECT COUNT(Pret_id) AS nb, MONTH(Pret_datedeb) as mois
        FROM Pret
        WHERE YEAR(Pret_datedeb) = 2009
        GROUP BY MONTH(Pret_datedeb)
    ) AS e
    La Connerie est une autre forme d'intelligence

  3. #3
    Membre du Club Avatar de mjs21
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 85
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par flo.87 Voir le message
    Quand tu dis que cela ne marche pas, est-ce que tu as une erreur SQL ou est-ce le résultat n'est pas correct ?

    Essaie une requête de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT MAX(e.nb) AS maxi, e.mois
    FROM (
      SELECT COUNT(Pret_id) AS nb, MONTH(Pret_datedeb) as mois
        FROM Pret
        WHERE YEAR(Pret_datedeb) = 2009
        GROUP BY MONTH(Pret_datedeb)
    ) AS e
    Après exécution de ta requête : erreur group by manquant, j'en ai mis un comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT MAX(e.nb) AS maxi, e.mois
    FROM (
      SELECT COUNT(Pret_id) AS nb, MONTH(Pret_datedeb) AS mois
        FROM Pret
        WHERE YEAR(Pret_datedeb) = 2009
        GROUP BY mois
    ) AS e
    GROUP BY 2
    Cependant, maintenant si j'ai un prêt au mois de mars et 3 au mois d'avril ça doit m'afficher 4(avril) | 3

    Cependant ça m'affiche :

    3(mars) | 1
    4(avril) | 3


    Arf

    Merci de ta réponse tout de même

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Tu peux essayer cette requete, l'idée étant de joindre le nombre de prets par mois avec le nombre maximum de pret sur un mois pour l'année 2009 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    SELECT NbPretsParMois.NbPrets, NbPretsParMois.Mois
    FROM 
    	(
    		SELECT MONTH(Pret_datedeb) as Mois, COUNT(Pret_id) AS NbPrets
    		FROM Pret 
    		WHERE YEAR(Pret_datedeb) = 2009
                    GROUP BY MONTH(Pret_datedeb)
    	) AS NbPretsParMois
    	JOIN
    	(
    	 	SELECT max(NbPrets) as NbPrets
    		FROM 
    		(
    			SELECT MONTH(Pret_datedeb) as Mois, COUNT(Pret_id) AS NbPrets
    			FROM Pret 
    			WHERE YEAR(Pret_datedeb) = 2009
    	                GROUP BY MONTH(Pret_datedeb) 
    		)
    	) AS NbPretsMax
    	ON NbPretsParMois.NbPrets = NbPretsMax.NbPrets

  5. #5
    Membre du Club Avatar de mjs21
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 85
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par Snipah Voir le message
    Tu peux essayer cette requete, l'idée étant de joindre le nombre de prets par mois avec le nombre maximum de pret sur un mois pour l'année 2009 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    SELECT NbPretsParMois.NbPrets, NbPretsParMois.Mois
    FROM 
    	(
    		SELECT MONTH(Pret_datedeb) as Mois, COUNT(Pret_id) AS NbPrets
    		FROM Pret 
    		WHERE YEAR(Pret_datedeb) = 2009
                    GROUP BY MONTH(Pret_datedeb)
    	) AS NbPretsParMois
    	JOIN
    	(
    	 	SELECT max(NbPrets) as NbPrets
    		FROM 
    		(
    			SELECT MONTH(Pret_datedeb) as Mois, COUNT(Pret_id) AS NbPrets
    			FROM Pret 
    			WHERE YEAR(Pret_datedeb) = 2009
    	                GROUP BY MONTH(Pret_datedeb) 
    		)
    	) AS NbPretsMax
    	ON NbPretsParMois.NbPrets = NbPretsMax.NbPrets
    #1248 - Every derived table must have its own alias

  6. #6
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Tu as deux alias NbPret change les nom peut être
    ►Ne pas oublier le

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Je pense plutot qu'il veut un alias pour chaque sous requete, j'ai jamais eu ce souci sous oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SELECT NbPretsParMois.NbPrets, NbPretsParMois.Mois
    FROM 
    	(
    		SELECT MONTH(Pret_datedeb) AS Mois, COUNT(Pret_id) AS NbPrets
    		FROM Pret 
    		WHERE YEAR(Pret_datedeb) = 2009
                    GROUP BY MONTH(Pret_datedeb)
    	) AS NbPretsParMois
    	JOIN
    	(
    	 	SELECT max(NbPrets) AS NbPrets
    		FROM 
    		(
    			SELECT MONTH(Pret_datedeb) AS Mois, COUNT(Pret_id) AS NbPrets
    			FROM Pret 
    			WHERE YEAR(Pret_datedeb) = 2009
    	                GROUP BY MONTH(Pret_datedeb) 
    		) AS test
    	) AS NbPretsMax
    	ON NbPretsParMois.NbPrets = NbPretsMax.NbPrets

  8. #8
    Membre du Club Avatar de mjs21
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 85
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par Snipah Voir le message
    Je pense plutot qu'il veut un alias pour chaque sous requete, j'ai jamais eu ce souci sous oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SELECT NbPretsParMois.NbPrets, NbPretsParMois.Mois
    FROM 
    	(
    		SELECT MONTH(Pret_datedeb) AS Mois, COUNT(Pret_id) AS NbPrets
    		FROM Pret 
    		WHERE YEAR(Pret_datedeb) = 2009
                    GROUP BY MONTH(Pret_datedeb)
    	) AS NbPretsParMois
    	JOIN
    	(
    	 	SELECT max(NbPrets) AS NbPrets
    		FROM 
    		(
    			SELECT MONTH(Pret_datedeb) AS Mois, COUNT(Pret_id) AS NbPrets
    			FROM Pret 
    			WHERE YEAR(Pret_datedeb) = 2009
    	                GROUP BY MONTH(Pret_datedeb) 
    		) AS test
    	) AS NbPretsMax
    	ON NbPretsParMois.NbPrets = NbPretsMax.NbPrets
    niquel ! merci beaucoup tout le monde

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Apparement c'est du SQL Server, si c'est du 2005 il y a plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT Mois, NbPrets
    FROM
        (
        SELECT MONTH(Pret_datedeb) AS Mois, COUNT(Pret_id) AS NbPrets, RANK() OVER(ORDER BY COUNT(Pret_id) DESC) AS Rk
        FROM Pret 
        WHERE YEAR(Pret_datedeb) = 2009
        GROUP BY MONTH(Pret_datedeb)
        ) AS T
    WHERE Rk = 1

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

Discussions similaires

  1. Compléter une requête avec max et count
    Par sergeants dans le forum Langage SQL
    Réponses: 16
    Dernier message: 21/05/2015, 17h17
  2. Problème requête SQL (HAVING COUNT / MAX)
    Par AuroreMu dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/11/2014, 17h24
  3. Problème sous-requête MAX et COUNT
    Par grafistolage dans le forum Requêtes
    Réponses: 6
    Dernier message: 06/07/2010, 09h08
  4. Requête avec MAX et COUNT
    Par arno a. dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 16/04/2007, 14h02
  5. Requêtes Max ???
    Par aburner dans le forum ASP
    Réponses: 4
    Dernier message: 07/02/2005, 11h20

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