##Instruction:
Database: financial
Total Tables: 8
Total Columns: 55

Table Schemas:

Database: financial
Total Tables: 8
Total Columns: 55

Table Schemas:

Table: account (4 columns)
--------------------------
• account_id (integer): the id of the account
• district_id (integer): location of branch
• frequency (text): frequency of the acount
• date (date): the creation date of the account
  Values: in the form YYMMDD

Table: card (4 columns)
-----------------------
• card_id (integer): id number of credit card
• disp_id (integer): disposition id
• type (text): type of credit card
  Values: "junior": junior class of credit card; 
"classic": standard class of credit card; 
"gold": high-leve...
• issued (date): the date when the credit card issued
  Values: in the form YYMMDD

Table: client (4 columns)
-------------------------
• client_id (integer): the unique number
• gender (text)
  Values: F：female 
M：male
• birth_date (date): birth date
• district_id (integer): location of branch

Table: disp (4 columns)
-----------------------
• disp_id (integer): unique number of identifying this row of record
• client_id (integer): id number of client
• account_id (integer): id number of account
• type (text): type of disposition
  Values: "OWNER" : "USER" : "DISPONENT"
commonsense evidence:
the account can only have the right to issue pe...

Table: district (16 columns)
----------------------------
• district_id (integer): location of branch
• A2 (text): district_name
• A3 (text): region
• A4 (text)
• A5 (text): municipality < district < region
• A6 (text): municipality < district < region
• A7 (text): municipality < district < region
• A8 (integer): municipality < district < region
• A9 (integer)
  Values: not useful
• A10 (real): ratio of urban inhabitants
• A11 (integer): average salary
• A12 (real): unemployment rate 1995
• A13 (real): unemployment rate 1996
• A14 (integer): no. of entrepreneurs per 1000 inhabitants
• A15 (integer): no. of committed crimes 1995
• A16 (integer): no. of committed crimes 1996

Table: loan (7 columns)
-----------------------
• loan_id (integer): the id number identifying the loan data
• account_id (integer): the id number identifying the account
• date (date): the date when the loan is approved
• amount (integer): approved amount
  Values: unit：US dollar
• duration (integer): loan duration
  Values: unit：month
• payments (real): monthly payments
  Values: unit：month
• status (text): repayment status
  Values: 'A' stands for contract finished, no problems;
'B' stands for contract finished, loan not paid;
'C' ...

Table: order (6 columns)
------------------------
• order_id (integer): identifying the unique order
• account_id (integer): id number of account
• bank_to (text): bank of the recipient
• account_to (integer): account of the recipient
  Values: each bank has unique two-letter code
• amount (real): debited amount
• k_symbol (text): purpose of the payment
  Values: "POJISTNE" stands for insurance payment
"SIPO" stands for household payment
"LEASING" stands for lea...

Table: trans (10 columns)
-------------------------
• trans_id (integer): transaction id
• account_id (integer)
• date (date): date of transaction
• type (text): +/- transaction
  Values: "PRIJEM" stands for credit
"VYDAJ" stands for withdrawal
• operation (text): mode of transaction
  Values: "VYBER KARTOU": credit card withdrawal
"VKLAD": credit in cash
"PREVOD Z UCTU" :collection from anot...
• amount (integer): amount of money
  Values: Unit：USD
• balance (integer): balance after transaction
  Values: Unit：USD
• k_symbol (text)
  Values: "POJISTNE": stands for insurrance payment
"SLUZBY": stands for payment for statement
"UROK": stands ...
• bank (text)
  Values: each bank has unique two-letter code
• account (integer)

##Evidence:
A2 refers to district name; A11 refers to average salary; loan status: A = Finished - OK, B = Finished - Default, C = Running - OK, D = Running - Default; interest rate is calculated as (total payments - loan amount) / loan amount * 100

##Role Access Policy (Column-Level):
Role: RiskAnalyst
Accessible Columns: account: account_id, district_id, frequency; client: client_id, birth_date, district_id; district: ALL COLUMNS; loan: loan_id, account_id, date, amount, duration, payments, status; trans: account_id, date, type, operation, amount, balance, k_symbol

Based on the above schema and your role's column-level access policy, generate a SQL query to answer the question. If your role does not have access to the required columns, respond with: "Sorry, I cannot answer."


Question: For 60-month loans, show me the top 3 largest loans in each district, including the district's average salary, loan details, client demographics, transaction history, and calculated interest rate. Order the results by highest average salary and loan amount.
Evidence: A2 refers to district name; A11 refers to average salary; loan status: A = Finished - OK, B = Finished - Default, C = Running - OK, D = Running - Default; interest rate is calculated as (total payments - loan amount) / loan amount * 100
Answer: Sorry, I cannot answer.
Permission: denied (Missing column permissions: disp: account_id, client_id; client: gender)
Gold SQL: WITH LoanStatistics AS (
  SELECT 
    T3.loan_id,
    T2.A2 AS district_name,
    T2.A11 AS avg_salary,
    T3.amount,
    T3.duration,
    T3.payments,
    T3.status,
    T3.account_id,
    ROW_NUMBER() OVER (PARTITION BY T2.A2 ORDER BY T3.amount DESC) AS district_loan_rank
  FROM account AS T1 
  INNER JOIN district AS T2 ON T1.district_id = T2.district_id 
  INNER JOIN loan AS T3 ON T1.account_id = T3.account_id 
  WHERE T3.duration = 60
),
ClientInfo AS (
  SELECT 
    d.account_id,
    COUNT(DISTINCT c.client_id) AS num_clients,
    SUM(CASE WHEN c.gender = 'M' THEN 1 ELSE 0 END) AS male_clients,
    SUM(CASE WHEN c.gender = 'F' THEN 1 ELSE 0 END) AS female_clients,
    AVG(CAST(strftime('%Y', 'now') AS INTEGER) - CAST(strftime('%Y', c.birth_date) AS INTEGER)) AS avg_client_age
  FROM disp d
  JOIN client c ON d.client_id = c.client_id
  GROUP BY d.account_id
),
TransactionSummary AS (
  SELECT
    account_id,
    COUNT(*) AS total_transactions,
    SUM(CASE WHEN type = 'PRIJEM' THEN amount ELSE 0 END) AS total_incoming,
    SUM(CASE WHEN type = 'VYDAJ' THEN amount ELSE 0 END) AS total_outgoing
  FROM trans
  GROUP BY account_id
)
SELECT 
  ls.loan_id,
  ls.district_name,
  ls.avg_salary,
  ls.amount AS loan_amount,
  ls.payments AS monthly_payment,
  ls.status AS loan_status,
  ls.district_loan_rank,
  CASE 
    WHEN ls.status = 'A' THEN 'Finished - OK'
    WHEN ls.status = 'B' THEN 'Finished - Default'
    WHEN ls.status = 'C' THEN 'Running - OK'
    WHEN ls.status = 'D' THEN 'Running - Default'
    ELSE 'Unknown'
  END AS status_description,
  ci.num_clients,
  ci.male_clients,
  ci.female_clients,
  ci.avg_client_age,
  ts.total_transactions,
  ts.total_incoming,
  ts.total_outgoing,
  (ts.total_incoming - ts.total_outgoing) AS account_balance,
  ROUND((ls.payments * ls.duration * 1.0 - ls.amount) / ls.amount * 100, 2) AS interest_rate_percent
FROM LoanStatistics ls
LEFT JOIN ClientInfo ci ON ls.account_id = ci.account_id
LEFT JOIN TransactionSummary ts ON ls.account_id = ts.account_id
WHERE ls.district_loan_rank <= 3
ORDER BY ls.avg_salary DESC, ls.amount DESC;