@ -28,77 +28,78 @@ try:
curs = co . cursor ( )
curs . execute ( ''' DROP TABLE IF EXISTS Car, Brand, Model, Person; ''' )
curs . execute ( ''' CREATE TABLE Brand (
Name varchar ( 80 ) ,
CreationDate numeric ,
Headquarter varchar ( 80 ) ,
PRIMARY KEY ( Name )
) ;
CREATE TABLE Model (
Name varchar ( 120 ) ,
FuelType varchar ( 50 ) ,
Transmission varchar ( 50 ) ,
Engine varchar ( 32 ) ,
MaxPower varchar ( 32 ) ,
MaxTorque varchar ( 32 ) ,
Drivetrain varchar ( 5 ) ,
Length numeric ,
Width numeric ,
Height numeric ,
SeatingCapacity numeric ,
FuelTankCapacity numeric ,
Brand varchar ( 80 ) ,
FOREIGN KEY ( Brand ) REFERENCES Brand ( Name ) ,
PRIMARY KEY ( Name )
) ;
CREATE TABLE Car (
idCar numeric ,
Price numeric ,
Color varchar ( 32 ) ,
Kilometer numeric ,
Year numeric ,
Owner varchar ( 30 ) ,
SellerType varchar ( 30 ) ,
Model varchar ( 120 ) ,
FOREIGN KEY ( Model ) REFERENCES Model ( Name ) ,
PRIMARY KEY ( IdCar )
) ;
CREATE TABLE Person (
id numeric PRIMARY KEY ,
Name varchar ( 80 ) ,
Job varchar ( 80 ) CHECK ( Job IN ( ' CEO ' , ' Founder ' ) ) ,
Brand varchar ( 80 ) ,
FOREIGN KEY ( Brand ) REFERENCES Brand ( Name )
) ;
''' )
curs . execute ( '''
DROP TABLE IF EXISTS Car , Brand , Model , Person CASCADE ;
CREATE TABLE Brand (
Name varchar ( 80 ) PRIMARY KEY ,
CreationDate numeric ,
Headquarter varchar ( 80 )
) ;
CREATE TABLE Model (
idModel numeric PRIMARY KEY ,
Name varchar ( 120 ) ,
FuelType varchar ( 50 ) ,
Transmission varchar ( 50 ) ,
Engine varchar ( 32 ) ,
MaxPower varchar ( 32 ) ,
MaxTorque varchar ( 32 ) ,
Drivetrain varchar ( 5 ) ,
Length numeric ,
Width numeric ,
Height numeric ,
SeatingCapacity numeric ,
FuelTankCapacity numeric ,
Brand varchar ( 80 ) ,
FOREIGN KEY ( Brand ) REFERENCES Brand ( Name )
) ;
CREATE TABLE Car (
idCar numeric PRIMARY KEY ,
Price numeric ,
Color varchar ( 32 ) ,
Kilometer numeric ,
Year numeric ,
Owner varchar ( 30 ) ,
SellerType varchar ( 30 ) ,
Model numeric ,
FOREIGN KEY ( Model ) REFERENCES Model ( idModel )
) ;
CREATE TABLE Person (
id numeric PRIMARY KEY ,
Name varchar ( 80 ) ,
Job varchar ( 80 ) CHECK ( Job IN ( ' CEO ' , ' Founder ' ) ) ,
Brand varchar ( 80 ) ,
FOREIGN KEY ( Brand ) REFERENCES Brand ( Name )
) ;
''' )
for row in dfBrand . itertuples ( ) :
curs . execute ( ''' INSERT INTO Brand VALUES ( %s , %s , %s ); ''' ,
( row . Name , row . CreationDate , row . Headquarter ) )
curs . execute ( ' SELECT Name FROM Brand; ' )
for row in dfPeople . itertuples ( ) :
curs . execute ( ''' INSERT INTO Person VALUES ( %s , %s , %s , %s ); ''' ,
( row . Id , row . Name , row . Job , row . Brand ) )
id = 1
idModel = 1
for row in df . itertuples ( ) :
#tranformer les prix (inr) en euros
price = row . Price / 90
curs . execute ( ''' INSERT INTO Car VALUES ( %s , %s , %s , %s , %s , %s , %s ); ''' ,
( id , price , row . Color , row . Kilometer , row . Year , row . Owner , row . SellerType ) )
id = id + 1
curs . execute ( ''' INSERT INTO Model VALUES ( %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s ); ''' ,
( row . Model , row . FuelType , row . Transmission , row . Engine , row . MaxPower ,
curs . execute ( ''' INSERT INTO Model VALUES ( %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s ); ''' ,
( idModel , row . Model , row . FuelType , row . Transmission , row . Engine , row . MaxPower ,
row . MaxTorque , row . Drivetrain , row . Length , row . Width , row . Height , row . SeatingCapacity ,
row . FuelTankCapacity ) )
row . FuelTankCapacity , row . Brand ) )
curs . execute ( ''' INSERT INTO Car VALUES ( %s , %s , %s , %s , %s , %s , %s , %s ); ''' ,
( id , price , row . Color , row . Kilometer , row . Year , row . Owner , row . SellerType , idModel ) )
id = id + 1
idModel = idModel + 1
#! Calcule de la moyenne des prix des véhicules
@ -135,28 +136,28 @@ try:
#! Répartition des prix :
#? A voir si on inverse les axes
# * répartition des prix des voitures dans le jeu de données.
# * Cela peut donner une idée de la plage de prix dans laquelle se situent la plupart des voitures.
datafr = pd . read_sql ( ''' SELECT Price AS prix, COUNT(*) AS nb_voitures
FROM Car
GROUP BY Price ; ''' , co)
datafr = datafr . plot . hist ( bins = 20 , x = " nb_voitures " , y = " prix " , xlabel = ' Prix ' , ylabel = ' Nombre de voitures ' ,
title = ' Répartition des prix des véhicules ' )
plt . show ( )
# * répartition des prix des voitures dans le jeu de données.
# * Cela peut donner une idée de la plage de prix dans laquelle se situent la plupart des voitures.
# datafr = pd.read_sql(''' SELECT Price AS prix, COUNT(*) AS nb_voitures
# FROM Car
# GROUP BY Price;''' , co)
# datafr = datafr.plot.hist(bins=20, x="nb_voitures", y="prix", xlabel='Prix', ylabel='Nombre de voitures' ,
# title='Répartition des prix des véhicules' )
# plt.show( )
#! Relation entre l'année de fabrication et le prix :
#! Relation entre l'année de sortie et le prix :
#* il y a une corrélation positive entre l'année de fabrication et le prix,
#* ce qui signifie que les véhicules plus récentes ont tendance à être plus chères
#* que les véhicules plus anciennes. À part les véhicules de collections
#* comme on peut le voir avant les années 90.
datafr = pd . read_sql ( ''' SELECT Year AS year, AVG(Price) AS prix_moyen
FROM Car
GROUP BY Year
ORDER BY Year ; ''' , co)
datafr [ ' year ' ] = datafr [ ' year ' ] . astype ( int )
datafr = datafr . plot . bar ( x = ' year ' , y = ' prix_moyen ' , xlabel = ' Année ' , ylabel = ' Prix moyen ' ,
title = ' Prix moyen d \' un véhicule en fonction de son année de sortie ' )
# datafr = pd.read_sql(''' SELECT Year AS year, AVG(Price) AS prix_moyen
# FROM Car
# GROUP BY Year
# ORDER BY Year;''' , co)
# datafr['year'] = datafr['year'].astype(int )
# datafr = datafr.plot.bar(x='year', y='prix_moyen', xlabel='Année', ylabel='Prix moyen',
# title='Prix moyen d\'un véhicule en fonction de son année de sortie' )
plt . show ( )
#! Relation entre le kilométrage et le prix :
@ -164,121 +165,122 @@ try:
#* ce qui signifie que les véhicules ayant un kilométrage plus élevé ont
#* tendance à être moins chères que les véhicules ayant un kilométrage plus faible.
#* À part les véhicules de collections qui peuvent posseder un kilométrage plus élevé (> 200 000).
datafr = pd . read_sql ( ''' SELECT Kilometer AS kilometrage, AVG(Price) AS prix_moyen
FROM Car
GROUP BY Kilometer
ORDER BY Kilometer ; ''' , co)
datafr [ ' kilometrage ' ] = pd . cut ( datafr [ ' kilometrage ' ] , bins = [ 0 , 10000 , 50000 , 100000 , 200000 , float ( ' inf ' ) ] ,
labels = [ ' <10K ' , ' 10K-50K ' , ' 50K-100K ' , ' 100K-200K ' , ' >200K ' ] , include_lowest = True )
datafr = datafr . groupby ( ' kilometrage ' ) [ ' prix_moyen ' ] . mean ( ) . reset_index ( )
datafr . plot . bar ( x = ' kilometrage ' , y = ' prix_moyen ' , xlabel = ' Kilométrage ' , ylabel = ' Prix moyen ' ,
title = ' Prix moyen d \' un véhicule en fonction de son kilométrage ' )
plt . show ( )
# datafr = pd.read_sql(''' SELECT Kilometer AS kilometrage, AVG(Price) AS prix_moyen
# FROM Car
# GROUP BY Kilometer
# ORDER BY Kilometer;''' , co)
# datafr['kilometrage'] = pd.cut(datafr['kilometrage'], bins=[0, 10000, 50000, 100000, 200000, float('inf')],
# labels=['<10K', '10K-50K', '50K-100K', '100K-200K', '>200K'], include_lowest=True )
# datafr = datafr.groupby('kilometrage')['prix_moyen'].mean().reset_index( )
# datafr.plot.bar(x='kilometrage', y='prix_moyen', xlabel='Kilométrage', ylabel='Prix moyen',
# title='Prix moyen d\'un véhicule en fonction de son kilométrage' )
# plt.show( )
# # ? Relation entre le type de carburant et le prix :
# # ! Relation entre le type de carburant et le prix :
# #* les véhicules fonctionnant à l'essence sont en moyenne moins chères
# #* que les véhicules fonctionnant au diesel mais les véhicules
# #* hybrides restent les plus chère sur le marché.
# datafr = pd.read_sql('''SELECT m.FuelType AS carburant, AVG(c.Price) AS prix_moyen
# FROM Car c, Model m
# WHERE c.Model = m.Name
# GROUP BY FuelType
# ORDER BY prix_moyen;''', co)
# datafr = datafr.plot.bar(x='carburant', y='prix_moyen', xlabel='Carburant', ylabel='Prix moyen',
# title='Prix moyen d\'un véhicule en fonction de son carburant')
# datafr = pd.read_sql('''SELECT Model.FuelType AS carburant, COUNT(*) AS nb_voitures FROM Car JOIN Model ON Car.Model = Model.idModel GROUP BY Model.FuelType ORDER BY nb_voitures;''', co)
# datafr['nb_voitures'] = datafr['nb_voitures'].astype(float)
# datafr.plot.bar(x='carburant', y='nb_voitures', xlabel='Carburant', ylabel='Nombre de voitures', title='Nombre de voitures par carburant')
# plt.show()
#! Relation entre le type de vendeur et le prix :
# ? modifier le registration
#* les voitures vendues par des concessionnaires ont tendance
#* à être plus chères que celles vendues par des propriétaires.
datafr = pd . read_sql ( ''' SELECT SellerType AS vendeur, AVG(Price) AS prix_moyen
FROM Car
GROUP BY SellerType
ORDER BY prix_moyen ; ''' , co)
datafr = datafr . plot . bar ( x = ' vendeur ' , y = ' prix_moyen ' , xlabel = ' Vendeur ' , ylabel = ' Prix moyen ' ,
title = ' Prix moyen des voitures par vendeur ' )
plt . show ( )
# datafr = pd.read_sql(''' SELECT SellerType AS vendeur, AVG(Price) AS prix_moyen
# FROM Car
# GROUP BY SellerType
# ORDER BY prix_moyen;''' , co)
# datafr = datafr.plot.bar(x='vendeur', y='prix_moyen', xlabel='Vendeur', ylabel='Prix moyen',
# title='Prix moyen des voitures par vendeur' )
# plt.show( )
# # ? Relation entre la puissance du moteur et le prix :
# # ! Relation entre la puissance du moteur et le prix :
# #* il y a une corrélation positive entre la puissance du moteur et le prix,
# #* ce qui signifie que les véhicules ayant une puissance plus élevée ont tendance
# #* à être plus chères que les véhicules ayant une puissance plus faible.
# #* À part les véhicules de collections qui peuvent posseder une puissance plus élevée (> 5000).
# #? comparer le prix moyen des voitures suivant leur puissance moteur
# df = pd.read_sql('''SELECT Engine AS engine, AVG(Price) AS prix_moyen
# FROM Car, Model
# WHERE Car.Model = Model.Name
# GROUP BY Engine
# ORDER BY prix_moyen DESC;''', co)
# df['engine'] = df['engine'].astype(str).str.replace('cc', '').astype(float)
# df['engine_range'] = pd.cut(df['engine'], bins=[0, 1000, 1500, 2000, 2500, 3000, 4000, 5000, float('inf')],
# labels=['<1000', '1000-1500', '1500-2000', '2000-2500', '2500-3000', '3000-4000',
# '4000-5000', '>5000'], include_lowest=True)
# datafr = df.groupby('engine_range')['prix_moyen'].mean().reset_index()
# datafr.plot.bar(x='engine_range', y='prix_moyen', xlabel='Puissance du moteur (en cc)', ylabel='Prix moyen',
# title='Prix moyen des voitures par puissance moteur')
# df = pd.read_sql('''SELECT Engine AS puissance, AVG(Price) AS prix_moyen
# FROM Car
# INNER JOIN Model ON Car.Model = Model.idModel
# GROUP BY puissance
# ORDER BY prix_moyen DESC;''', co)
# df['puissance'] = df['puissance'].astype(str).str.replace('cc', '').astype(float)
# df['puissance_range'] = pd.cut(df['puissance'],
# bins=[0, 1000, 1500, 2000, 2500, 3000, 4000, 5000, float('inf')],
# labels=['<1000', '1000-1500', '1500-2000', '2000-2500', '2500-3000',
# '3000-4000', '4000-5000', '>5000'], include_lowest=True)
# datafr = df.groupby('puissance_range')['prix_moyen'].mean().reset_index()
# datafr.plot.bar(x='puissance_range', y='prix_moyen', xlabel='Puissance moteur (en cc)',
# ylabel='Prix moyen (en euros)', title='Prix moyen des voitures par tranche de puissance moteur')
# plt.show()
# #? Relation entre le type de transmission et le prix :
# #! Relation entre le type de transmission et le prix :
# #* les voitures avec une transmission automatique sont en moyenne
# #* plus chères que celles avec une transmission manuelle.
# # ! remplacer comme df au dessus
# datafr = pd.read_sql('''SELECT m.Transmission AS transmission, AVG(c.Price) AS prix_moyen
# FROM Car c, Model m
# WHERE c.Model = m. Name
# WHERE c.Model = m. idModel
# GROUP BY transmission
# ORDER BY prix_moyen;''', co)
# datafr = datafr.plot.bar(x='transmission', y='prix_moyen', xlabel='Transmission',
# ylabel='Prix moyen', title='Prix moyen des voitures par transmission')
# datafr.plot.bar(x='transmission', y='prix_moyen', xlabel='Transmission',
# ylabel='Prix moyen', title='Prix moyen des voitures par transmission')
# plt.show()
#! relation entre le nombre de propriétaires précédents et le prix :
#* il y a une corrélation négative entre le nombre de propriétaires précédents et le prix,
#* ce qui signifie que les voitures ayant été possédées par un plus grand nombre de propriétaires
#* ont tendance à être moins chères.
datafr = pd . read_sql ( ''' SELECT Owner AS proprietaires, AVG(Price) AS prix_moyen
FROM Car
GROUP BY Owner
ORDER BY prix_moyen ; ''' , co)
datafr = datafr . plot . bar ( x = ' proprietaires ' , y = ' prix_moyen ' , xlabel = ' Nombre de propriétaires ' ,
ylabel = ' Prix moyen ' , title = ' Prix moyen des voitures par nombre de propriétaires ' )
plt . show ( )
# datafr = pd.read_sql(''' SELECT Owner AS proprietaires, AVG(Price) AS prix_moyen
# FROM Car
# GROUP BY Owner
# ORDER BY prix_moyen;''' , co)
# datafr = datafr.plot.bar(x='proprietaires', y='prix_moyen', xlabel='Nombre de propriétaires' ,
# ylabel='Prix moyen', title=' Prix moyen des voitures par nombre de propriétaires')
# plt.show( )
# # ? relation entre le nombre de sièges et le prix :
# # ! relation entre le nombre de sièges et le prix :
# #* il y a une corrélation positive entre le nombre de sièges et le prix,
# #* ce qui signifie que les voitures ayant un plus grand nombre de sièges ont tendance à être plus chères.
# datafr = pd.read_sql('''SELECT m.SeatingCapacity AS sieges, AVG(c.Price) AS prix_moyen
# FROM Car c, Model m
# FROM Car c
# INNER JOIN Model m ON c.Model = m.idModel
# GROUP BY m.SeatingCapacity
# ORDER BY prix_moyen;''', co)
# datafr = datafr.plot.bar(x='sieges', y='prix_moyen', xlabel='Nombre de sièges',
# ORDER BY prix_moyen''', co)
# datafr = datafr.plot.bar(x='sieges', y='prix_moyen', xlabel='Nombre de sièges',
# ylabel='Prix moyen', title='Prix moyen des voitures par nombre de sièges')
# plt.show()
# #? relation entre la longueur du véhicule et son prix :
# #! relation entre la longueur du véhicule et son prix :
# #* il y a une corrélation positive entre la longueur du véhicule et le prix,
# #* ce qui signifie que les voitures ayant une plus grande longueur ont tendance à être plus chères.
# datafr = pd.read_sql('''SELECT Length AS longueur, AVG(Price) AS prix_moyen
# FROM Car, Model
# WHERE Car.Model = Model.Name
# GROUP BY Length
# ORDER BY prix_moyen;''', co)
# datafr = datafr.plot.bar(x='longueur', y='prix_moyen', xlabel='Longueur du véhicule (en cm)',
# ylabel='Prix moyen', title='Prix moyen des voitures par longueur')
# df = pd.read_sql('''SELECT Length AS longueur, AVG(Price) AS prix_moyen
# FROM Car
# INNER JOIN Model ON Car.Model = Model.idModel
# GROUP BY longueur
# ORDER BY prix_moyen DESC;''', co)
# df['longueur_range'] = pd.cut(df['longueur'],
# bins=[0, 3500, 4000, 4500, 5000, 5500, float('inf')],
# labels=['<3500', '3500-4000', '4000-4500', '4500-5000', '5000-5500', '>5500'], include_lowest=True)
# datafr = df.groupby('longueur_range')['prix_moyen'].mean().reset_index()
# datafr.plot.bar(x='longueur_range', y='prix_moyen', xlabel='Longueur du véhicule (en cm)',
# ylabel='Prix moyen (en euros)', title='Prix moyen des voitures par tranche de longueur')
# plt.show()
# #? relation entre la puissance du moteur et le prix :
# #* il y a une corrélation positive entre la puissance du moteur et le prix,
# #* ce qui signifie que les voitures ayant une plus grande puissance ont tendance à être plus chères.
# datafr = pd.read_sql('''SELECT Engine AS puissance, AVG(Price) AS prix_moyen
# FROM Car
# GROUP BY Engine
# ORDER BY prix_moyen;''', co)
# datafr = datafr.plot.bar(x='puissance', y='prix_moyen', xlabel='Puissance du moteur (en cc)',
# ylabel='Prix moyen', title='Prix moyen des voitures par puissance')
# plt.show()
# #! relation entre la couleur et le prix :
# #* on peut donc remarquer que la couleur peut influer sur le prix d'une voiture.
@ -292,28 +294,110 @@ try:
# plt.show()
# ? trouver les marques dont le CEO est le Founder
curs . execute ( ''' SELECT DISTINCT Brand.Name
FROM Brand
JOIN Person ON Brand . Name = Person . Brand
WHERE Person . Job = ' Founder ' AND Person . Name =
( SELECT Person . Name FROM Person WHERE Person . Job = ' CEO ' AND Person . Brand = Brand . Name ) ; ''' )
print ( curs . fetchall ( ) )
# ! trouver les marques dont le CEO est le Founder
# affiche rien car aucun ceo est le founder
# curs.execute('''SELECT DISTINCT Brand.Name
# FROM Brand
# JOIN Person founder ON Brand.Name = founder.Brand AND founder.Job = 'Founder'
# JOIN Person ceo ON Brand.Name = ceo.Brand AND ceo.Job = 'CEO' AND ceo.Name = founder.Name;''' )
# print(curs.fetchall() )
#? moyenne de prix des voitures d'une marque selon l'année de création de la marque
df = pd . read_sql ( ''' SELECT Brand.Name AS marque,ROUND(AVG(Car.Price)) AS prix_moyen,
FLOOR ( ( Brand . CreationDate - 1900 ) / 10 ) * 10 AS annee_de_creation FROM Car JOIN Model ON Car . Model = Model . Name JOIN Brand ON Model . Brand = Brand . Name
GROUP BY marque , annee_de_creation ORDER BY annee_de_creation ASC , prix_moyen DESC ; ''' , co)
# #? moyenne de prix des voitures d'une marque selon l'année de création de la marque
# df = pd.read_sql('''SELECT Brand.Name AS marque, ROUND(AVG(Car.Price)) AS prix_moyen,
# FLOOR((Brand.CreationDate - 1900) / 10) * 10 AS annee_de_creation FROM Car
# JOIN Model ON Car.Model = Model.idModel
# JOIN Brand ON Model.Brand = Brand.Name
# GROUP BY marque, annee_de_creation
# ORDER BY annee_de_creation ASC, prix_moyen DESC;''', co)
# Converti les années de création en tranches de 10 ans
df [ ' annee_de_creation ' ] = pd . cut ( df [ ' annee_de_creation ' ] , bins = range ( 1900 , 2021 , 10 ) , labels = [ f " { x } - { x + 9 } " for x in range ( 1900 , 2020 , 10 ) ] )
ax = df . plot . bar ( x = ' annee_de_creation ' , y = ' prix_moyen ' , xlabel = ' Année de création de la marque ' , ylabel = ' Prix moyen ' , title = ' Prix moyen des voitures par année de création de la marque ' )
ax . legend ( [ ' Prix moyen ' ] )
plt . show ( )
# # Convertit les années de création en tranches de 10 ans
# df['annee_de_creation'] = pd.cut(df['annee_de_creation'], bins=range(1900, 2021, 10), labels=[f"{x}-{x+9}" for x in range(1900, 2020, 10)])
# # Pivot la table pour avoir les années en colonne
# df_pivot = df.pivot(index='marque', columns='annee_de_creation', values='prix_moyen')
# ax = df_pivot.plot(kind='bar', xlabel='Marque', ylabel='Prix moyen',
# title='Prix moyen des voitures par année de création de la marque')
# ax.legend(title='Année de création', bbox_to_anchor=(1.01, 1), loc='upper left')
# plt.show()
# df = pd.read_sql('''DO $$
# DECLARE
# ceo varchar;
# famille varchar;
# PrixMoyFamille numeric;
# PrixMoyPasFamille numeric;
# cur CURSOR FOR SELECT p.Name, p.job FROM Person p, Brand b WHERE b.Name = p.Brand GROUP BY p.Brand;
# BEGIN
# FOR i IN cur LOOP
#
# END LOOP;
# END;
# $$ ;''')
# '''IF nbMed>3 THEN
# dateF=dateF+5;
# ELSEIF nbMed>0 THEN
# dateF=dateF+3;
# ELSE
# dateF=dateF+1;
# END IF;'''
# datafr = pd.read_sql('''SELECT AVG(Price) FROM Car GROUP BY Model;''', co)
# datafr = datafr.plot.bar(xlabel='Modele', ylabel='Prix moyen',
# title='Prix moyen d\'un véhicule en fonction de sa marque')
# plt.show()
# #? Fonctionne mais ne return pas round
curs . execute ( ''' DROP FUNCTION IF EXISTS prix_moyen;
CREATE FUNCTION prix_moyen ( marque varchar )
RETURNS numeric AS $ $
DECLARE
moyenne numeric ;
BEGIN
SELECT AVG ( Price ) INTO moyenne
FROM Car , Model
WHERE Car . model = Model . idModel
AND Model . Brand = marque ;
RETURN ROUND ( moyenne ) ;
END ;
$ $ LANGUAGE plpgsql ;
SELECT prix_moyen ( ' Toyota ' ) ''' ,co)
print ( curs . fetchall ( ) )
# # df = pd.read_sql('''DO $$
# DECLARE
# ceo varchar;
# famille varchar;
# PrixMoyFamille numeric = 0;
# PrixMoyPasFamille numeric = 0;
# cursFounder CURSOR FOR SELECT p.Name, p.Brand FROM Person p WHERE p.Job = 'Founder';
# cursCEO CURSOR FOR SELECT p.Name, p.Brand FROM Person WHERE p.job = 'CEO';
# BEGIN
# FOR founder IN cursFounder LOOP
# famille = SPLIT_PART(founder.Name,' ',1)
# FOR directeur IN cursCEO LOOP
# ceo = SPLIT_PART(ceo.Name,' ',1)
# IF directeur.Brand = founder.name THEN
# IF ceo.Name = SPLIT_PART(founder.name,' ',1)
# PrixMoyFamille = PrixMoyFamille + prix_moyen(ceo.Brand);
# ELSE
# PrixMoyPasFamille = PrixMoyPasFamille + prix_moyen(ceo.Brand)
# END IF;
# END IF;
# END LOOP;
# END LOOP;
# RETURN PrixMoyFamille, PrixMoyPasFamille
# END;
# $$ ;''')
co . commit ( )
curs . close ( )
except ( Exception , psy . DatabaseError ) as error :