Skip to content

Commit 78a1102

Browse files
author
Aymeric
committed
Livraison des requêtes avancées
1 parent 5128488 commit 78a1102

File tree

3 files changed

+96
-68
lines changed

3 files changed

+96
-68
lines changed

investissement_sup.sql

-12
This file was deleted.

requetes_avancees.sql

+96
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
use bankapp;
2+
3+
/* Identifier les clients avec un
4+
total d'investissements supérieur à leur solde total.
5+
*/
6+
SELECT clients.id_client, comptes.solde, SUM(transactions.montant) as total_transactions
7+
FROM clients
8+
JOIN comptes ON clients.id_client = comptes.id_client
9+
JOIN transactions ON transactions.id_compte = comptes.id_compte
10+
WHERE transactions.statut = 'validé'
11+
GROUP BY clients.id_client, comptes.solde
12+
HAVING SUM(transactions.montant) > comptes.solde
13+
14+
/*
15+
Trouver les comptes ayant le plus haut taux de transactions réussies
16+
*/
17+
SELECT DISTINCT comptes.id_compte, comptes.id_client, c.prenom, c.nom, /* Récupérer les infos à afficher */
18+
COUNT(transactions.id_transaction) as transactions_reussies, /* récupération des transactions */
19+
COUNT(transactions.id_transaction) * 100.0 /
20+
(SELECT COUNT(*) FROM transactions WHERE transactions.id_compte = comptes.id_compte) as taux_reussite /* Calcul du % de réussite des transactions */
21+
FROM comptes /* Les infos sont à récupérer depuis la table "comptes". */
22+
JOIN transactions ON comptes.id_compte = transactions.id_compte /* On a besoin également des infos de la table "transactions". */
23+
JOIN clients c ON c.id_client = comptes.id_client /* Également besoin des infos de la table "clients". */
24+
WHERE transactions.statut = 'validé' /* Pour le calcul du % de transactions réussies, on veut uniquement les transactions avec le status "validé". */
25+
GROUP BY comptes.id_compte, comptes.id_client, c.prenom /* Regrouper les résultats par client via son compte */
26+
ORDER BY taux_reussite DESC, transactions_reussies DESC /* On applique un tri pour que les % de réussites plus élevées soient en tête de liste */;
27+
28+
/*
29+
Lister les clients qui n'ont pas utilisé de services de prêt ou d'investissement
30+
*/
31+
SELECT DISTINCT c.id_client, c.nom, c.prenom /* On récupère l'ID, le nom et prénom du client, en indiquant qu'on veut un résultat unique par client */
32+
FROM clients c /* Sélection de la table "clients" */
33+
LEFT JOIN comptes co ON c.id_client = co.id_client /* Récupération des infos dans la table des comptes */
34+
LEFT JOIN prets p ON c.id_client = p.id_client /* Récupération des infos dans la table des prêts */
35+
LEFT JOIN transactions t ON co.id_compte = t.id_compte AND t.type = 'investissement' /* Récupération des infos dans la table des transactions */
36+
WHERE p.id_pret IS NULL /* On veut que les prêts soient nuls (vides) */
37+
AND t.id_transaction IS NULL /* et aussi qu'aucune transaction ne soit enregistrée */;
38+
39+
/*
40+
Déterminer le montant total des intérêts générés par les prêts - VERSION ANNUELLE
41+
*/
42+
SELECT SUM(montant * taux_interet) AS total_interets_annuels /* Addition de la multiplication du montant de chaque prêt avec le taux d'intérêt */
43+
FROM prets; /* À partir de la table "prets". Permet de calculer sur l'année */
44+
45+
/*
46+
Déterminer le montant total des intérêts générés par les prêts - SUR LA TOTALITÉ DU PRÊT
47+
*/
48+
SELECT SUM(montant * taux_interet * (duree / 12)) AS total_interets
49+
FROM prets;
50+
51+
/*
52+
Déterminer le montant total des intérêts générés par les prêts - MENSUEL
53+
*/
54+
SELECT
55+
id_pret, /* Sélectionne l'identifiant du prêt */
56+
montant, /* Avec le montant */
57+
taux_interet, /* Et le taux d'intérêt */
58+
montant * (taux_interet / 12) AS interets_mensuels /* Calcul des intérêts pour un mois */
59+
FROM prets; /* À partir de la table des prêts */
60+
61+
/* Calculer la variation mensuelle du nombre de transactions */
62+
63+
WITH transactions_mensuelles AS (
64+
/* Définition d'une Common Table Expression : "transactions_mensuelles" */
65+
SELECT
66+
DATE_FORMAT(date_transaction, '%Y-%m-01') AS mois,
67+
/* Convertit la date de transaction en format 'YYYY-MM-01', pour regrouper toutes les transactions du même mois */
68+
COUNT(*) AS nombre_transactions
69+
/* On compte le nombre de transactions pour chaque mois */
70+
FROM transactions
71+
/* À partir de la table "transactions" */
72+
GROUP BY DATE_FORMAT(date_transaction, '%Y-%m-01')
73+
/* On regroupe les résultats par mois */
74+
),
75+
transactions_avec_mois_precedent AS (
76+
/* Définition d'une deuxième Common Table Expression */
77+
SELECT
78+
mois,
79+
nombre_transactions,
80+
LAG(nombre_transactions) OVER (ORDER BY mois) AS nombre_transactions_mois_precedent
81+
/* Utilise la fonction LAG pour obtenir le nombre de transactions du mois précédent */
82+
FROM transactions_mensuelles
83+
/* Utilise les résultats de la première Common Table Expression */
84+
)
85+
SELECT
86+
mois,
87+
nombre_transactions,
88+
nombre_transactions_mois_precedent,
89+
nombre_transactions - nombre_transactions_mois_precedent AS variation_absolue,
90+
/* Calcule la variation du nombre de transactions */
91+
IF(nombre_transactions_mois_precedent = 0, NULL,
92+
(nombre_transactions - nombre_transactions_mois_precedent) * 100.0 / nombre_transactions_mois_precedent) AS variation_pourcentage
93+
/* Calcule la variation en %, en gérant le cas où le mois précédent aurait 0 transaction pour éviter les erreurs de calcul */
94+
FROM transactions_avec_mois_precedent
95+
ORDER BY mois;
96+
/* Trie les résultats par ordre chronologique */

taux_transactions_reussies.sql

-56
This file was deleted.

0 commit comments

Comments
 (0)