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

Oracle Discussion :

[9i] group by 1 : problème confirmé


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 47
    Points : 63
    Points
    63
    Par défaut [9i] group by 1 : problème confirmé
    create table test (a int, b int);
    insert into test values(1,2);
    insert into test values(3,4);

    select b,count(*) as nb from test group by b;
    <- OK

    select b,count(*) as nb from test group by 1; <- ORA-00979: not a GROUP BY expression

    select <ERROR>b,count(*) as nb from test group by 1

    je savais bien l'autre jour quand j'ai posté que j'avais pas rêvé

    pourtant dans certains cas cela semble marcher et mysql l'accepte sans problème ??


  2. #2
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    C'est le ORDER BY 1 qui est autorisé et pas le GROUP BY c'est ça ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 77
    Points : 84
    Points
    84
    Par défaut
    Si tu veux faire un group by, il faut dire par quoi tu regroupes... group by 1 est à mon avis une abération. Group by est la pour regrouper les lignes par paquets et pouvoir faire des calculs (comptage, somme) à l'intérieur de ces paquets...

    Qu'espère tu comme résultat ?
    si c'est :
    2,2 (colonne b=2, 2 lignes au total dans la table)
    4,2 (colonne b=4, 2 lignes au total dans la table)

    tu va utiliser une fonction analytique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select b, count(*) over () from test
    ou faire un produit cartesien comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select test.b, nb 
    from test, (select count(*) nb from test)
    Certains rdbms accepte des choses qui n'ont pas forcement de sens ou qui ne sont pas dans la norme... J'ai souvenir que ça marchait aussi dans sybase (et que la clause group by n'était pas obligatoire)...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 47
    Points : 63
    Points
    63
    Par défaut
    En fait le "group by 1" 1 etant le numéro de colonne ne marche sous oracle que pour les colonnes constantes on dirait. (genre select 'a' as toto, .... group by 1).

    En fait je ne cherche pas à faire de requête, j'ai des requêtes à la syntaxe mysql que je dois transformer automatiquement en requêtes oracle avec des expressions régulières mais dans ce cas précis je vais devoir me palucher la transformation à la main ...

    Ca commence à marcher mais c'est pas encore au point ...

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par cmoicmoi
    En fait le "group by 1" 1 etant le numéro de colonne ne marche sous oracle que pour les colonnes constantes on dirait. (genre select 'a' as toto, .... group by 1).
    ...
    C'est qu'il prend le "1" comme le nombre 1 et rien d'autre, si tu faisais group by 'PortNaWak' ça serait exactement pareil. Mais faire un group by quelque chose de constant, c'est comme ne pas faire de group by du tout!

Discussions similaires

  1. Problème SELECT, CASE et Group by
    Par Royd938 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/10/2014, 07h41
  2. Réponses: 3
    Dernier message: 15/07/2005, 17h58
  3. [SQL] problème avec les date et les group By
    Par Stef784ever dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2004, 09h18
  4. problème avec un GROUP BY
    Par Vermin dans le forum Requêtes
    Réponses: 4
    Dernier message: 30/03/2004, 14h44
  5. Réponses: 9
    Dernier message: 17/01/2004, 10h51

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