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

Requêtes MySQL Discussion :

est ce qu'on peut faire un groupement sur un alias


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 58
    Points
    58
    Par défaut est ce qu'on peut faire un groupement sur un alias
    bonjour tous le monde
    j'ai une requete dans laquelle j'ai utilisé la clause case qui me retourne une valeur selon une condition ;
    la requete est la suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select hour(m.E8) as heure ,
    case
      when LOCATE('/',m.E5,8)=0  then substr(m.E5, 8 )
      else substr(m.E5, 8 ,( LOCATE('/',m.E5,8)-8))
    end  as URL
    from tab m
    et je veux faire un group by URL ; est ce que si possible . si oui comment le faire
    merci d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    Citation Envoyé par moha_alnif Voir le message
    et je veux faire un group by URL ; est ce que si possible . si oui comment le faire
    merci d'avance pour votre aide
    Ce n'est pas normatif, mais MySQL le permet. Tu fais tout simplement :


  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    bonjour
    merci Antoun pour ta réponse ;
    oui pour mysql 5.0.0 il admit le groupement par alias
    mais lorsque je l' utilise dans un programme java , il y a des exception
    merci encore

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Peut-être une question de driver JDBC, qui vérifie la syntaxe SQL ?
    Ca serait surprenant mais pas impossible...

    Quel driver utilises-tu ? Que disent les exceptions ?

    ced

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    bonjour
    merci por vous reponses ;
    j'utilise mysql 5.0.0 ,driver : mysql-connector-java3.1.11 .bon pou ma requete j'arrive a l'executer apartitr du mysqlQueryBrowser ; mais dans mon programme java dans lequel j'ai utliser hibernate 3 comme couche du persistence ca ne marche pas :
    le requete que je veux executer est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     select  concat( day(m.E8) ,'/',month(m.E8),'/', year(m.E8) )  , hour(m.E8)  , count(*) as pull ,
                  case
                     when LOCATE('/',m.E5,8)=0  then substr(m.E5, 8 )
                    else substr(m.E5, 8 ,( LOCATE('/',m.E5,8)-8))
                  end  as url
                  from  MiepPull  m
                  where m.E5 is not null
                  group by URL
                  order by hour(m.E8) asc  ;
    et l'exception déclenchée est causé par la fonction SUBSTR() et pas par le groupement selon l'alias URL
    l'exception est la suivante :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    Exception in thread "main" java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.CaseNode 
     \-[CASE] CaseNode: 'case'
        +-[WHEN] SqlNode: 'when'
        |  +-[EQ] BinaryLogicOperatorNode: '='
        |  |  +-[METHOD_CALL] MethodNode: '('
        |  |  |  +-[METHOD_NAME] IdentNode: 'LOCATE' {originalText=LOCATE}
        |  |  |  \-[EXPR_LIST] SqlNode: 'exprList'
        |  |  |     +-[QUOTED_STRING] LiteralNode: ''/''
        |  |  |     +-[DOT] DotNode: 'mieppull0_.E5' {propertyName=E5,dereferenceType=4,propertyPath=E5,path=m.E5,tableAlias=mieppull0_,className=xmiep.persistence.jdo.MiepPull,classAlias=m}
        |  |  |     |  +-[ALIAS_REF] IdentNode: 'mieppull0_.pull_id' {alias=m, className=xmiep.persistence.jdo.MiepPull, tableAlias=mieppull0_}
        |  |  |     |  \-[IDENT] IdentNode: 'E5' {originalText=E5}
        |  |  |     \-[NUM_INT] LiteralNode: '8'
        |  |  \-[NUM_INT] LiteralNode: '0'
        |  \-[METHOD_CALL] MethodNode: '('
        |     +-[METHOD_NAME] IdentNode: 'substr' {originalText=substr}
        |     \-[EXPR_LIST] SqlNode: 'exprList'
        |        +-[DOT] DotNode: 'mieppull0_.E5' {propertyName=E5,dereferenceType=4,propertyPath=E5,path=m.E5,tableAlias=mieppull0_,className=xmiep.persistence.jdo.MiepPull,classAlias=m}
        |        |  +-[ALIAS_REF] IdentNode: 'mieppull0_.pull_id' {alias=m, className=xmiep.persistence.jdo.MiepPull, tableAlias=mieppull0_}
        |        |  \-[IDENT] IdentNode: 'E5' {originalText=E5}
        |        \-[NUM_INT] LiteralNode: '8'
        \-[ELSE] SqlNode: 'else'
           \-[METHOD_CALL] MethodNode: '('
              +-[METHOD_NAME] IdentNode: 'substr' {originalText=substr}
              \-[EXPR_LIST] SqlNode: 'exprList'
                 +-[DOT] DotNode: 'mieppull0_.E5' {propertyName=E5,dereferenceType=4,propertyPath=E5,path=m.E5,tableAlias=mieppull0_,className=xmiep.persistence.jdo.MiepPull,classAlias=m}
                 |  +-[ALIAS_REF] IdentNode: 'mieppull0_.pull_id' {alias=m, className=xmiep.persistence.jdo.MiepPull, tableAlias=mieppull0_}
                 |  \-[IDENT] IdentNode: 'E5' {originalText=E5}
                 +-[NUM_INT] LiteralNode: '8'
                 \-[MINUS] BinaryArithmeticOperatorNode: '-' {dataType=org.hibernate.type.IntegerType@118223d}
                    +-[METHOD_CALL] MethodNode: '('
                    |  +-[METHOD_NAME] IdentNode: 'LOCATE' {originalText=LOCATE}
                    |  \-[EXPR_LIST] SqlNode: 'exprList'
                    |     +-[QUOTED_STRING] LiteralNode: ''/''
                    |     +-[DOT] DotNode: 'mieppull0_.E5' {propertyName=E5,dereferenceType=4,propertyPath=E5,path=m.E5,tableAlias=mieppull0_,className=xmiep.persistence.jdo.MiepPull,classAlias=m}
                    |     |  +-[ALIAS_REF] IdentNode: 'mieppull0_.pull_id' {alias=m, className=xmiep.persistence.jdo.MiepPull, tableAlias=mieppull0_}
                    |     |  \-[IDENT] IdentNode: 'E5' {originalText=E5}
                    |     \-[NUM_INT] LiteralNode: '8'
                    \-[NUM_INT] LiteralNode: '8'
     
            at org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:140)
            at org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:702)
            at org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:531)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:645)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
            at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:218)
            at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)
            at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
            at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
            at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
            at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
            at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
            at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
            at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
    merci encore

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    bonjour
    merci pour vos réponse
    j'ai trouver la solution : dans les requetes hibernate il faut utiliser la fonction SUBSTRING et pas SUBSTR
    pour sql les deux sont valables

  7. #7
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Il est vrai que le standard sql semble être SUBSTRING
    http://sqlpro.developpez.com/cours/motsreserves/

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/05/2012, 01h18
  2. Est-ce que exim peut faire serveur pop3 ?
    Par eomer212 dans le forum Réseau
    Réponses: 3
    Dernier message: 17/07/2009, 16h04
  3. Réponses: 0
    Dernier message: 29/06/2008, 14h20
  4. Réponses: 12
    Dernier message: 31/12/2005, 16h01
  5. Qu'est ce qu'on peut faire avec un in ?
    Par elias dans le forum Langage SQL
    Réponses: 7
    Dernier message: 24/07/2005, 10h34

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