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 :

Création de vues pour des requêtes imbriquées


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    tunisie
    Inscrit en
    Novembre 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : tunisie
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 19
    Points : 18
    Points
    18
    Par défaut Création de vues pour des requêtes imbriquées
    Bonjour ;

    J’essaie de créer les vues de cette requête sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     select sum(l_extendedprice) / 7.0 as avg_yearly from lineitem, part where p_partkey = l_partkey and p_brand = 'Brand#23' and p_container = 'MED CAN' and l_quantity < ( select 0.2 * avg(l_quantity) from lineitem where l_partkey = p_partkey ) ;
    Voila les vues que j'ai créer :

    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
    ------ create table Filter_p_brand_Q17 As select * from part where  p_brand = 'Brand#23';
     
     
    select * from Filter_p_brand_Q17;
     
     
    ------ create table Filter_p_container_Q17 As select * from Filter_p_brand_Q17 where p_container = 'MED CAN';
     
    select * from Filter_p_container_Q17;
     
     
    ------ create table Join_l_p_Q17 As select * from  Filter_p_container_Q17 p , lineitem l where  l.l_partkey = p.p_partkey ;
     
    select * from Join_l_p_Q17;
     
     
    ------ create table Project1_Q17 As select (0.2 * avg(l_quantity)) as avg_l_quantity  from  Join_l_p_Q17;
     
    select * from Project1_Q17;
    ce qui me bloque c'est cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l_quantity < ( select 0.2 * avg(l_quantity) from lineitem where l_partkey = p_partkey )
    comment puis je récupérer la valeur du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ( select 0.2 * avg(l_quantity) from lineitem where l_partkey = p_partkey )
    et la comparée avec l_quantity selon l'opérateur <

    Merci pour vos aide.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    1) Les jointures s'écrivent depuis 1992 avec l'opérateur JOIN ; il serait temps de s'y mettre !

    2) Un code indenté et aéré est plus agréable à lire et à déboguer.

    3) L'utilisation d'alias pour les tables est fortement recommandé dès qu'il y a plus d'une table dans la requête. Cela facilite l'écriture et la lecture de celle-ci. Il faut ensuite utiliser systématiquement ces alias devant chaque colonne nommée pour savoir facilement de quelle table elle vient.

    4)
    Voila les vues que j'ai créer :
    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
    ------ create table Filter_p_brand_Q17 As select * from part where  p_brand = 'Brand#23';
     
     
    select * from Filter_p_brand_Q17;
     
     
    ------ create table Filter_p_container_Q17 As select * from Filter_p_brand_Q17 where p_container = 'MED CAN';
     
    select * from Filter_p_container_Q17;
     
     
    ------ create table Join_l_p_Q17 As select * from  Filter_p_container_Q17 p , lineitem l where  l.l_partkey = p.p_partkey ;
     
    select * from Join_l_p_Q17;
     
     
    ------ create table Project1_Q17 As select (0.2 * avg(l_quantity)) as avg_l_quantity  from  Join_l_p_Q17;
     
    select * from Project1_Q17;
    Euh... là vous ne créez pas des vues mais des tables ! Une vue est une requête enregistrée et se crée de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE VIEW nom_de_la_vue AS
    SELECT ...
    5) La requête corrélée dans le WHERE sera probablement contre-performante

    6) Je ne vois pas l'intérêt de ce que vous voulez faire !
    Vous avez une requête qui, a priori, répond à votre besoin ; pourquoi voulez-vous l'éclater en plusieurs vues ?

    7) Est-ce que cette requête répond à votre besoin ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT SUM(l.l_extendedprice) / 7.0 AS avg_yearly
    FROM lineitem l
    INNER JOIN part p ON p.p_partkey = l.l_partkey
    INNER JOIN
    (
    	SELECT l_partkey, (l_quantity) AS average_quantity
    	FROM lineitem
    	GROUP BY l_partkey
    ) tmp ON tmp.l_partkey = l.l_partkey
    WHERE p.p_brand = 'Brand#23'
    	AND p.p_container = 'MED CAN'
    	AND l.l_quantity < 0.2 * tmp.average_quantity
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre à l'essai
    Femme Profil pro
    tunisie
    Inscrit en
    Novembre 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : tunisie
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 19
    Points : 18
    Points
    18
    Par défaut
    J'ai décomposer la requête pour un autre travail, la requête de t'as créer ne donne pas la même résultat que la requête d'origine.

    Résultat requête d'origine :

    Nom : Screenshot from 2017-11-24 13:15:41.png
Affichages : 287
Taille : 22,6 Ko

    Résultat de ton requête :

    Nom : Screenshot from 2017-11-24 13:16:09.png
Affichages : 289
Taille : 29,9 Ko

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et cette requête là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT SUM(l.l_extendedprice) / 7.0 AS avg_yearly
    FROM lineitem l
    INNER JOIN part p ON p.p_partkey = l.l_partkey
    INNER JOIN
    (
    	SELECT l_partkey, AVG(l_quantity) AS average_quantity
    	FROM lineitem
    	GROUP BY l_partkey
    ) tmp ON tmp.l_partkey = p.p_partkey
    WHERE p.p_brand = 'Brand#23'
    	AND p.p_container = 'MED CAN'
    	AND l.l_quantity < 0.2 * tmp.average_quantity
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre à l'essai
    Femme Profil pro
    tunisie
    Inscrit en
    Novembre 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : tunisie
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 19
    Points : 18
    Points
    18
    Par défaut
    Oui merci ça marche, j'essaie de créer les tables selon cette réécriture.

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

Discussions similaires

  1. Créer des vues pour des Requêtes Sql
    Par babyy dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/08/2017, 22h44
  2. Aide pour des requêtes SQL
    Par psgkiki dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/01/2008, 15h06
  3. Réponses: 1
    Dernier message: 20/04/2007, 23h56
  4. Réponses: 2
    Dernier message: 15/03/2007, 14h00
  5. Créer une vue avec des requêtes UNION ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2005, 12h37

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