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 :

SQLITE : fonction MAX


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 127
    Points : 52
    Points
    52
    Par défaut SQLITE : fonction MAX
    Bonjour,
    Je coince un peut sur une requete sql pour le moins tres simple
    Je voudrais recuperer la valeur maximal et minimal d'un champ, le champ en question est de type INTEGER et a plus de 1000 enregistrements (la table est sur SQLite)
    voici ma requete
    SELECT MIN(Level) AS Min, MAX(Level) AS Max FROM Cards
    Le minimum renvoyé est bien 1 (résultat attendu) mais le maximum n'est pas donné (renvoi d'aucune donnée), le résultat attendu est 12
    Je ne comprend pas pourquoi MAX ne marche pas
    Merci pour toute aide

  2. #2
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Si tu selectionne le max en premier et le min après, quel est le résultat ?

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 127
    Points : 52
    Points
    52
    Par défaut
    j'ai le même résultat

  4. #4
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    En selectionnant le max tout seul, tu le récupères ou pas ?

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 127
    Points : 52
    Points
    52
    Par défaut
    non plus, javais déjà essayé :s

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Points : 146
    Points
    146
    Par défaut
    Pourtant ta requête est supposé fonctionner.

    Essaye avec une jointure interne a ta table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT MIN(TABLE1.Level),MAX(TABLE2.Level) FROM Cards AS Table1 LEFT JOIN Cards AS Table2

  7. #7
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par pepi22 Voir le message
    Pourtant ta requête est supposé fonctionner.

    Essaye avec une jointure interne a ta table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT MIN(TABLE1.Level),MAX(TABLE2.Level) FROM Cards AS Table1 LEFT JOIN Cards AS Table2
    Ce qui est bizarre c'est qu'en ne sélectionnant que le max le résultat est erroné.

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 127
    Points : 52
    Points
    52
    Par défaut
    je n'ai pas compris le code de la jointure interne
    quels sont les tables 1 et 2 ?!
    ce qui est bizarre en effet c'est bien que le max seul ne fonctionne pas

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Points : 146
    Points
    146
    Par défaut
    Je ne connait pas SQLite mais une requête

    SELECT MAX(Champ)

    doit fonctionner normalement sur tout les SGDB.

    Essaye avec un moin grand nombre de donnée. (peut-être le nombre de donnée)

    Sinon : Démarrer -> panneau de configuration - > Ajout/suppression de programmes -> Désinstaller SQLite et ne plus jamais utilisé ce SGDB

  10. #10
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par Bouki Voir le message
    je n'ai pas compris le code de la jointure interne
    quels sont les tables 1 et 2 ?!
    Les tables 1 et 2 sont deux Tables Cards. Littéralement, c'est comme si tu selectionnait le min en utilisant la table1 et le max en utilisant la table2 (qui est différente de la table1)

  11. #11
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 127
    Points : 52
    Points
    52
    Par défaut
    en utilisant la requete de jointure interne j'obtient le meme résultat
    je ne peut pas désinstaller sqlite ^^" en effet je travaille sur une bdd étrangère qui utilise le format sqlite

    j'ai réalisé un select distinct(level) from cards, voici le résultat :

    Array
    (
    [0] => Array
    (
    [Level] => 8
    )

    [1] => Array
    (
    [Level] => 4
    )

    [2] => Array
    (
    [Level] => 5
    )

    [3] => Array
    (
    [Level] => 1
    )

    [4] => Array
    (
    [Level] => 7
    )

    [5] => Array
    (
    [Level] => 2
    )

    [6] => Array
    (
    [Level] => 3
    )

    [7] => Array
    (
    [Level] =>
    )

    [8] => Array
    (
    [Level] => 6
    )

    [9] => Array
    (
    [Level] => 11
    )

    [10] => Array
    (
    [Level] => 9
    )

    [11] => Array
    (
    [Level] => 10
    )

    )

  12. #12
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Je vois bien le 1 qui est censé être le min mais pas le 12 qui est censé être le max. Je vois plutôt un 11, en plus il y a un champ NULL, c'est peut être lui qui pose pb, tu peux essayer en ajoutant une condition dans un where :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    where level is not NULL

  13. #13
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 127
    Points : 52
    Points
    52
    Par défaut
    je crois que je viens de réaliser pourquoi MAX ne fonctionnait pas, en effet le champ Level est parfois vide (valeur "")
    contrairement à mysql qui met NULL par défaut, sqlite met une valeur "" qui vaut numériquement plus qu'un petit nombre
    ma requete corrigé est donc
    SELECT MAX(Level) AS Max, MIN(Level) AS Min FROM Cards WHERE Level <> ""

    tout ca parceque sqlite ne prend pas en compte NULL et les champs vides correctement ^^"

  14. #14
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 127
    Points : 52
    Points
    52
    Par défaut
    @AL1986 : je viens de voir ton post, ta requete ne marche pas car le NULL n'est pas pris en compte par sqlite, et effectivement le max est de 11 (et non 12), car la bdd n'est pas encore complète

  15. #15
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par Bouki Voir le message
    je crois que je viens de réaliser pourquoi MAX ne fonctionnait pas, en effet le champ Level est parfois vide (valeur "")
    contrairement à mysql qui met NULL par défaut, sqlite met une valeur "" qui vaut numériquement plus qu'un petit nombre
    ma requete corrigé est donc
    SELECT MAX(Level) AS Max, MIN(Level) AS Min FROM Cards WHERE Level <> ""

    tout ca parceque sqlite ne prend pas en compte NULL et les champs vides correctement ^^"
    Et dans ce cas ça marche ou pas ?

  16. #16
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 127
    Points : 52
    Points
    52
    Par défaut
    ca marche parfaitement (il renvoi 11)

  17. #17
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par Bouki Voir le message
    ca marche parfaitement (il renvoi 11)
    Un petit pour sceller tout ça.

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

Discussions similaires

  1. Optimisation fonction MAX
    Par AurelGTS dans le forum Langage SQL
    Réponses: 7
    Dernier message: 14/05/2007, 19h26
  2. [SQL Server 8] fonction Max --- selon des conditions
    Par Baquardie dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/01/2006, 21h06
  3. fonction MAX
    Par javaSudOuest dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2005, 18h12
  4. Fonction MAX dans une condition WHERE
    Par borgfabr dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/10/2004, 16h06
  5. Fonction max d'un tableau de variables...
    Par Romalafrite dans le forum ASP
    Réponses: 7
    Dernier message: 20/07/2004, 10h38

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