TP 2ème niveau - solutions

BoTTom |
nombre de vins par producteurs
 
................................................
: select p.pr_code, count(*) as nombre         :
:        from producteurs p                    :
:        join vins        v                    :
:             on p.pr_code= v.pr_code          :
: group by p.pr_code                           :
:..............................................:
 
nombre de vins en moyenne par producteurs (le résultat est 3)
 
.........................................................................
: with temp as (select vins.pr_code                                     :
:         , count(*) as nombre from vins join producteurs               :
:                                on vins.pr_code= producteurs.pr_code   :
: group by vins.pr_code)                                                :
:                                                                       :
: select avg(nombre) from temp                                          :
:                                                                       :
:.......................................................................:
 
liste des producteurs produisant un nombre > à la moyenne
(classée par nombre de vins produits, en décroissant)
 
........................................................................
: with temp as (select vins.pr_code, vins.pr_nom,                      :
:         , count(*) as nombre from vins join producteurs              :
:                                on vins.pr_code= producteurs.pr_code  :
: group by vins.pr_code, vins.pr_nom                                   :
: select * from temp  where nombre > (select avg(nombre) from temp)    :
:......................................................................:
 
le TOP 10 des producteurs (en nombre de vins produits) OS/400 en V5R10
........................................................................
:  select vins.pr_code, producteurs.pr_nom                             :
:           , count(*) as nombre from vins join producteurs            :
:                               on vins.pr_code= producteurs.pr_code   :
:   group by vins.pr_code , producteurs.pr_nom                         :
:   order by 3 desc                                                    :
:                                                                      :
:   fetch first 10 rows only                                           :
:......................................................................:
 


|
 
 
 
 
le TOP 10 des producteurs (en nombre de vins produits) OS/400 en V4R50
 
........................................................................
: with temp as                                                         :
: (select vins.pr_code, vins.pr_nom                                    :
:           , count(*) as nombre from vins join producteurs            :
:                               on vins.pr_code= producteurs.pr_code   :
:   group by vins.pr_code , vins.pr_nom)                               :
:                                                                      :
: select * from temp T                                                 :
: where 10 >= (select count(*) from temp                               :
:              where nombre > t.nombre)           order by 2 desc      :
:......................................................................:
 
 
 
 
 
 
 ou bien
 
.........................................................................
: create table qtemp/stat                                               :
:  (code integer, nom char(50) , nombre integer)                        :
:                                                                       :
: insert into stat                                                      :
:                                                                       :
:  select vins.pr_code , vins.pr_nom                                    :
:           , count(*) as nombre from vins join producteurs             :
:                               on vins.pr_code= producteurs.pr_code    :
:   group by vins.pr_code, vins.pr_nom                                  :
:  order by nombre desc                                                 :
:                                                                       :
: select * from stat where rrn(stat) < 11                               :
:                                                                       :
:.......................................................................:
 
 
 
 


|
il y a-t-il des appellations sans producteur ?
   si oui, combien ?
 
....................................................
: select count(*)                                  :
:         from appellations  a                     :
:                                                  :
:         exception join producteurs pr            :
:              on  a.appel_code = pr.appel_code    :
:..................................................:
 
il y a-t-il des appellations n'ayant ni producteur
   ni vin, si oui combien ?
 
..................................................................
: select count(*) from appellations a where                             :
: not exists                                                     :
:  (select * from producteurs  where appel_code = a.appel_code)  :
:  and not exists                                                :
:  (select * from vins  where appel_code = a.appel_code)         :
:................................................................:
 
 
par producteur, nombre de vins: blanc , rouge/rosé
 
 
     producteur | nbr de blanc  |  nbr de rouges |
     ---------------------------------------------
 
..................................................
: select P.pr_code, pr_nom,                      :
:   sum(case                                     :
:  when type_code in (1 , 2 , 7 , 8) then 1      :
:  else 0 end) as "Blanc" ,                      :
:   sum(case                                     :
:  when type_code in (3 , 4 , 5 , 6) then 1      :
:  else 0 end) as "Rouge/rosé"                   :
:   from producteurs P join vins V               :
:                 on P.pr_code = V.pr_code       :
:  group by P.pr_code , pr_nom                   :
:                                                :
:................................................:
 
 


|
 
 puis demandez le total des vins blanc et des vins rouges
 
.....................................................................
:                                                                   :
: select                                                            :
:   sum(case                                                        :
:  when type_code in (1 , 2 , 7 , 8) then 1                         :
:  else 0 end) as "Blanc" ,                                         :
:   sum(case                                                        :
:  when type_code in (3 , 4 , 5 , 6) then 1                         :
:  else 0 end) as "Rouge/rosé"                                      :
:   from producteurs P join vins V                                  :
:                 on P.pr_code = V.pr_code                          :
:                                                                   :
:                                                                   :
:                                                                   :
:...................................................................:
 
 
 
 
 
augmentez le prix-actuel des vins ayant plus de 5 ans
 
          de 10% si le prix est < à 50 F
          de 15% si le prix est < à 100 F
          de 20% au dela de 100 F
 
 
.........................................................................
: update ma_cave set                                                    :
:                                                                       :
: cav_prxactuel = (case                                                 :
:                   when cav_prxactuel < 50 then cav_prxactuel * 1,10   :
:                   when cav_prxactuel <100 then cav_prxactuel * 1,15   :
:                   else                         cav_prxactuel * 1,20   :
:                  end)                                                 :
: where cav_millesime < year(now() - 5 years)                           :
:.......................................................................:
 
 
 
 


|
 
placez vous sous contrôle de validation (par F13) , puis
  supprimez les producteurs sans vin.
.....................................................................
: delete from producteurs pr                                        :
:                                                                   :
: where not exists (select * from vins where pr_code = pr.pr_code)  :
:...................................................................:
 
relancez le SELECT des producteurs sans vins
 constatez le résulat
.....................................................................
: (liste vide)                                                      :
:                                                                   :
:...................................................................:
 
invalidez (ROLLBACK), relancez le SELECT des producteurs sans vins
 constatez le résulat.
.....................................................................
: ROLLBACK                                                          :
:  (vous retrouvez vos 503 producteurs)                             :
:...................................................................:
 
ajoutez au fichier des vins une zone prix_tarif acceptant NULL
 
   .......................................
   : alter table vins                    :
   :   add column prix_tarif dec(7 , 2)  :
   :.....................................:
 
 
renseignez cette zone pour les vins de votre cave avec le prix actuel
 
 ..................................................................
 : update vins V set prix_tarif = (select avg(cav_prxactuel)      :
 :                                  from ma_cave                  :
 :                                  where vin_code = v.vin_code)  :
 :................................................................:
 
 
 
si la zone n'avait pas accepté la valeur nulle, ou pour des raisons de perf.
  comment fallait-il écrire la requête?
 


|
 
 ......................................................................
 :                                                                    :
 :  update vins V set prix_tarif = (select avg(cav_prxactuel)         :
 :                                   from ma_cave                     :
 :                                   where vin_code = v.vin_code)     :
 :                where exists  (select *                             :
 :                                 from ma_cave                       :
 :                                 where vin_code = v.vin_code)       :
 :                                                                    :
 :....................................................................:
 
 
 
enlevez la zone prix tarif
 
       ..................................................
       :                                                :
       :   alter table vins drop column prix_tarif      :
       :                                                :
       :................................................:




©AF400