vues
This commit is contained in:
152
banque.md
152
banque.md
@@ -664,3 +664,155 @@ create table operation (
|
||||
"direction" text check (direction in ('DEBIT', 'CREDIT'))
|
||||
);
|
||||
```
|
||||
|
||||
# Séance 3 : Exploitation des données
|
||||
|
||||
Créer des vues pour
|
||||
|
||||
## **1. Vue : liste des titulaires détaillés**
|
||||
|
||||
Créer une vue *holder_details* permettant d’afficher **tous les titulaires** (banque, personne ou entreprise) sous une forme unifiée.
|
||||
|
||||
La vue doit contenir :
|
||||
|
||||
* l’identifiant du titulaire
|
||||
* son type
|
||||
* un champ `display_name` calculé ainsi :
|
||||
|
||||
* pour un titulaire de type *PERSON* : *firstname lastname*
|
||||
* pour un titulaire de type *COMPANY* : *name*
|
||||
* pour un titulaire de type *BANK* : *name*
|
||||
|
||||
## **2. Vue : liste des comptes avec devise et solde**
|
||||
|
||||
Créer une vue *account_summary* affichant :
|
||||
|
||||
* l’identifiant du compte
|
||||
* la date d’ouverture
|
||||
* la devise
|
||||
* le solde
|
||||
* le nombre de titulaires du compte
|
||||
|
||||
## **3. Vue : comptes par titulaire**
|
||||
|
||||
Créer une vue *holder_accounts* permettant de lister les comptes détenus par chaque titulaire, avec :
|
||||
|
||||
* le titulaire (id et type)
|
||||
* le nom du titulaire
|
||||
* l’identifiant du compte
|
||||
* la part détenue (`share`)
|
||||
* le solde total du compte
|
||||
|
||||
La vue doit fusionner les informations venant de **holder, person et company**.
|
||||
|
||||
## **4. Vue : opérations enrichies**
|
||||
|
||||
Créer une vue *operation_details* affichant les opérations avec :
|
||||
|
||||
* la date de l’opération
|
||||
* le compte impacté
|
||||
* la direction (DEBIT ou CREDIT)
|
||||
* le montant de l’opération
|
||||
* le montant signé (crédit positif, débit négatif)
|
||||
* le solde du compte **après l’opération** (bonus : fenêtre analytique)
|
||||
|
||||
> Cet exercice introduit les **fenêtres SQL** (`sum() over (...)`).
|
||||
|
||||
## **5. Vue : taux de change du jour**
|
||||
|
||||
Créer une vue *today_exchange_rates* qui affiche pour **chaque devise** son taux de change du jour présent dans `exchange_rate`.
|
||||
|
||||
Si aucun taux du jour n’existe, la ligne ne doit pas apparaître.
|
||||
|
||||
## **6. Vue : solde converti en EUR**
|
||||
|
||||
Créer une vue *account_balance_eur* pour afficher :
|
||||
|
||||
* compte
|
||||
* devise d’origine
|
||||
* solde original
|
||||
* taux de change correspondant à la date du jour
|
||||
* solde converti en EUR (solde × taux)
|
||||
|
||||
> Supposer que *EUR* est toujours présent dans la table `currency`.
|
||||
|
||||
## **7. Vue : transactions complètes**
|
||||
|
||||
Créer une vue *transaction_summary* affichant un regroupement par transaction :
|
||||
|
||||
* id de la transaction
|
||||
* date
|
||||
* montant total de la transaction (somme des opérations)
|
||||
* liste des comptes concernés (optionnel : concaténation)
|
||||
|
||||
## **8. Vue : comptes en découvert imminent**
|
||||
|
||||
Créer une vue *accounts_at_risk* listant les comptes dont le solde est inférieur à 50 (dans leur devise), ou qui auraient un solde négatif s'ils effectuaient un débit supplémentaire de 20.
|
||||
|
||||
> Vérification simple : `balance - 20 < 0 OR balance < 50`.
|
||||
|
||||
## **9. Vue : âge des personnes**
|
||||
|
||||
Créer une vue *person_age* indiquant :
|
||||
|
||||
* id
|
||||
* nom complet
|
||||
* date de naissance
|
||||
* âge en années (utiliser `age()`)
|
||||
|
||||
## **10. Vue : répartition des parts d’un compte**
|
||||
|
||||
Créer une vue *account_shares* affichant :
|
||||
|
||||
* id du compte
|
||||
* nombre de titulaires
|
||||
* somme des parts
|
||||
* une colonne booléenne `is_valid` vérifiant si la somme = 1
|
||||
|
||||
> Objectif : vérifier que les parts des comptes joints sont bien réparties.
|
||||
|
||||
## **11. Vue : solde par titulaire**
|
||||
|
||||
Créer une vue *holder_total_balance* indiquant pour chaque titulaire :
|
||||
|
||||
* id
|
||||
* type
|
||||
* nom
|
||||
* somme des soldes de tous ses comptes (pondérée par `share`), calcul :
|
||||
`total = SUM(share × balance)`
|
||||
|
||||
## **12. Vue : opérations d’un compte en sens unique**
|
||||
|
||||
Créer une vue *account_debits* listant uniquement les opérations de type DEBIT, avec :
|
||||
|
||||
* date
|
||||
* compte
|
||||
* montant négatif
|
||||
|
||||
Créer une seconde vue *account_credits* (montants positifs).
|
||||
|
||||
## **13. Vue : dernier taux connu pour chaque devise**
|
||||
|
||||
Créer une vue *latest_exchange_rate* qui donne, pour chaque devise, son taux de change le plus récent :
|
||||
|
||||
* joindre avec une sous-requête récupérant `max(date)` pour chaque devise.
|
||||
|
||||
## **14. Vue : liste des entreprises avec ancienneté**
|
||||
|
||||
Créer une vue *company_age* indiquant :
|
||||
|
||||
* id
|
||||
* name
|
||||
* registration_number
|
||||
* age de l’entreprise en années (`age(current_date, created_at)`)
|
||||
|
||||
## **15. Vue : recapitulatif bancaire complet**
|
||||
|
||||
Créer une vue *bank_overview* qui croise :
|
||||
|
||||
* les titulaires
|
||||
* leurs comptes
|
||||
* leurs transactions
|
||||
* leurs opérations
|
||||
|
||||
But : proposer une vue permettant d’obtenir le *“mini bilan"* d’un titulaire.
|
||||
|
||||
Reference in New Issue
Block a user