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 :

Problème simple langage sqlite mais je débute


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème simple langage sqlite mais je débute
    Bonjour,

    Je vous expose mon probleme, j'ai une base de données sous sqlite, lorsque je tape cette commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT vchFirstName
      FROM dvd, user
     WHERE user.iUserId = dvd.iUserId;
    Je trouve ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    eleve6      
    eleve6      
    eleve1      
    eleve1      
    eleve4      
    eleve4      
    eleve2      
    eleve2      
    eleve2      
    eleve2      
    eleve5      
    eleve5      
    eleve5
    Et mon probleme maintenant je voudrais rajouter quelque chose à ma commande (pour n'avoir a taper qu'une commande ) pour qu'il ne s'affiche que l'élève qui apparait le plus de fois dans cette liste donc ici l'élève 2.

    Que faut-il rajouter à la commande ?

    Merci !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,


    Je ne connais pas sqlite donc la syntaxe suivante risque de ne pas marcher.

    En gros il faut que vous fassiez une sous requête qui va compter le nombre d'occurrence de chaque user et les classer. Ensuite ne prendre que les X premier.

    En utilisant des fonctions de fenêtrages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    with tmp as (
    select vchFirstName, rank() over(order by count(*) desc) as rnk
    from dvd a
    inner join user b on a.iUserId = b.iUserId
    group by vchFirstName)
     
    select vchFirstName
    from tmp
    where rnk = 1

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    J'ai craint que sqllite ne connaisse pas les fonctions de fenêtrage ni les common table Expression. Voilà donc une requete qui en est dépourvu.
    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
    select vchFirstName
    from user u
    inner join 
    	(	select	a.iUserId,
    			count(*) as nbre_occurence
    		from dvd
    		group by  a.iUserId
    	) as  N
    on u.iUserId=N.iUserId
    inner join 
    (
    	select max(nbre ) as max_nbre
    	from
    	(	select a.iUserId, count(*)  as nbre
    		from dvd
    		group by  a.iUserId
    	) as A
    ) as B
    on N.nbre_occurence=A.max_nbre
    J'espère que sqllite l'acceptera.
    Soazig

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    vous pouvez aussi faire simplement

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT vchFirstName, count(*)  
    FROM dvd, user
    WHERE user.iUserId = dvd.iUserId;
    GROUP BY vchFirstName
    ORDER BY count(*) DESC
    LIMIT 1

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    ah oui bien vu, mais il me semble que l'order by ce fait en dernier dans une requete non ?

    du coup le résultat avec le fetch first risque d'être aléatoire ?

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    En fait je ne sais pas trop ou se met le LIMIT, je travaille sous MSSQL, et donc avec des SELECT TOP...

    alors effectivement, le LIMIT est peut etre mal placé...

    pourquoi un probleme avec fetch first ?

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    J'avais bien pensé au limit ou top, mais je ne connaissais pas la spécificité du dialecte sqllite, et effectivement selon les SGBD l'option en question est faite avant ou après l'order by.
    Par exemple sous oracle where rownum <=1 et fait avant l'order by.
    Soazig

Discussions similaires

  1. Problème simple mais qui me prend la tete
    Par bucheron007 dans le forum Visio
    Réponses: 1
    Dernier message: 08/05/2009, 21h11
  2. problème simple mais bloquant
    Par marianna dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 13/05/2008, 13h31
  3. Editeur de texte simple comme notepad mais en JAVA
    Par Hamdi Hedhili dans le forum EDI et Outils pour Java
    Réponses: 2
    Dernier message: 13/03/2006, 14h32
  4. [Javadoc]La Javadoc et un problème... simple mais paralysant
    Par lionrouge dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 09/12/2005, 00h00
  5. Problème simple d'apostrophe qui m'ennerve !
    Par beletteroi dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/09/2005, 21h58

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