Pour le premier, tu peux procéder ainsi
select
case
when nbheures < 250 then 'pilote débutant'
when nbheures >= 250 and nbheures <= 1700 then 'pilote expérimenté'
when nbheures > 1700 then 'pilote expert'
end as 'Type pilote',
count(1) as 'Total'
from
pilote
group by
1;
count(1) renvoie au compte de la première colonne
group by 1 dicte de grouper selon les valeurs de la première colonne
(Étonnamment, cette syntaxe ne fonctionne pas avec Oracle mais je doute que tu l'utilises).
_
Pour le second, tu n'es pas obligé d'utiliser concat. Je te recommanderais plutôt cette syntaxe qui surcharge les conditions de la jointure et qui est plus commune
select
p.numplace,
concat(p.indcomp, p.numvol) as 'Numéro de vol',
p.prixplace,
p.prixplace/TIME_TO_SEC(v.dureevol)*60 as 'Prix à la minute'
from
pilote as p
inner join vol as v on p.numvol = v.numvol and p.indcomp = v.indcomp;
Ce n'est pas quelque chose qui arrivera avec tes données mais abandonne ce réflexe car dans le futur, tu pourrais avoir un problème du genre avec la concaténation. Considérons que tu aies les lignes suivantes :
indcomp = 'LUF1' et numvol = 1
indcomp = 'LUF' et numvol = 11
Les deux concaténations renverront LUF11. Alors méfiance.
_
Et pour finir dans le cadre d'une jointure classique (inner join),
from
pilote as p
inner join vol as v on p.numvol = v.numvol and p.indcomp = v.indcomp;
Est identique à
from
pilote as p
inner join vol as v on p.numvol = v.numvol
where
p.indcomp = v.indcomp;
Et
from
pilote as p
inner join vol as v on p.indcomp = v.indcomp
where
p.numvol = v.numvol;
Et
from
pilote as p,
vol as v
where
p.numvol = v.numvol
and p.indcomp = v.indcomp;
(corrigez moi si je dis une bêtise, le SQL n'est pas mon domaine d'expertise, mais il me semble bien qu'il y a équivalence
)