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

SQL Oracle Discussion :

calcul de prix mini de tous les articles contenant "R".


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut calcul de prix mini de tous les articles contenant "R".
    Bonjour, je voudrais sortir les articles moins chers entre les artciles contenant la lettre "%R%".

    j'ai éssayer ça, mais j'ai des erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select libart, p.codart, min(prix1) as Mini
    from vente v, produit p
    where p.libart like '%r%'
    and v.codart= p.codart
    and prix1 < min(prix1);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SQL Error: ORA-00934: fonction de groupe non autoris�e ici
    00934. 00000 -  "group function is not allowed here"
    *Cause:    
    *Action:
    ensuite j'ai essayer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select libart, p.codart, prix1
    from vente v, produit p
    where p.libart like '%r%'
    and v.codart= p.codart
    and v.prix1< v.prix1;
    mais j'ai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    LIBART                                             CODART PRIX1                  
    -------------------------------------------------- ------ ---------------------- 
     
    0 rows selected
    Merci

    ORACLE 11G, SQL DEVELOPER 1.5.3

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Y'a pas comme une différence ?
    contenant la lettre "%R%".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE p.libart LIKE '%r%'
    Ensuite
    autant mettre

  3. #3
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Les fonctions d'agrégations ne sont pas permises dans le WHERE :
    Les conditions dans le WHERE permettent de filtrer les lignes, et s'appliquent donc sur chaque ligne unitairement. Alors que pour avoir un "min", il te faut traiter un ensemble de lignes.

    Problème supplémentaire :
    Bonjour, je voudrais sortir les articles moins chers entre les artciles contenant la lettre "%R%".
    Que veut dire cette phrase ?
    Si tu cherches moins cher que le moins cher, c'est perdu.
    Ca veut donc dire que tu détermines le min sur un autre périmètre que celui des articles résultats... tu vois ce que je veux dire ?

    Donc, si ce que tu veux c'est "dans la liste de tous les articles, je veux ceux qui sont moins chers que ceux contenant un R", je peux te proposer la chose suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT libart, p.codart, prix1, (SELECT min(prix1)
                 FROM vente v1, produit p1
    			 WHERE p1.libart LIKE '%r%') as MINI
    FROM vente v, produit p
    WHERE v.codart= p.codart
    AND prix1 < (SELECT min(prix1)
                 FROM vente v1, produit p1
    			 WHERE p1.libart LIKE '%r%')
    ;

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    La solution de Pacmann me paraît un peu compliquée.
    J'aurai plutôt imaginé quelque chose d'autre (que j'ai supprimé car c'était idiot).

    En relisant l'énoncé initial je ne suis pas certain que nous partions du bon côté.

    Cashmoney, sur l'exemple suivant que désirez-vous obtenir comme résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Frigo       100 €
    Frigo       150 €
    Congélateur 250 €
    Congélateur 300 €
    Four         99 €
    Lampe        25 €
    Lampe        50

  5. #5
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Waldar, il te manque un group by dans la sous-requête, je suppose.

    Par ailleurs, ta requête semble faire exactement une seule requête GROUP BY qui renvoie le min, non ?

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Ah oui, c'est bien vu.
    Je vais éditer.

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

Discussions similaires

  1. [Spip] Afficher tous les articles d'une sous rubrique
    Par nanoplatine dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 16/02/2008, 12h08
  2. [MediaWiki] Ajouter du code php dans tous les articles
    Par *WaNa* dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 04/02/2008, 23h49
  3. Requête des meilleurs prix sur pour tous les produit
    Par Baathor dans le forum Développement
    Réponses: 4
    Dernier message: 07/10/2007, 20h28
  4. fonction recherche tous les articles commencant par *
    Par Daniel MOREAU dans le forum Access
    Réponses: 4
    Dernier message: 31/01/2007, 16h04

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