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 : : : :................................................: |