##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:
Status = 'C' means running contract with no issues; Small loans are under $50,000, Medium loans are $50,000-$99,999; Percentage is calculated by dividing loans with status 'C' by total loans and multiplying by 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 loans under $100,000, what is the percentage of loans running with no issues in each region and loan size category, and how does each region's performance compare to the overall average?
Evidence: Status = 'C' means running contract with no issues; Small loans are under $50,000, Medium loans are $50,000-$99,999; Percentage is calculated by dividing loans with status 'C' by total loans and multiplying by 100
Answer: WITH LoanStatusByRegion AS (
    SELECT 
        d.A3 AS region,
        l.status,
        l.amount,
        l.duration,
        CASE 
            WHEN l.status = 'C' THEN 1
            ELSE 0
        END AS is_running_ok,
        CASE 
            WHEN l.amount < 50000 THEN 'Small'
            WHEN l.amount < 100000 THEN 'Medium'
            ELSE 'Large'
        END AS loan_size_category
    FROM 
        loan l
    JOIN 
        account a ON l.account_id = a.account_id
    JOIN 
        district d ON a.district_id = d.district_id
    WHERE 
        l.amount < 100000
),
RegionalStats AS (
    SELECT 
        region,
        loan_size_category,
        COUNT(status) AS total_loans,
        SUM(is_running_ok) AS running_ok_loans,
        CAST(SUM(is_running_ok) AS REAL) * 100 / COUNT(status) AS percentage_running_ok,
        AVG(amount) AS avg_loan_amount,
        AVG(duration) AS avg_duration
    FROM 
        LoanStatusByRegion
    GROUP BY 
        region, loan_size_category
),
OverallStats AS (
    SELECT 
        loan_size_category,
        COUNT(status) AS total_loans,
        SUM(is_running_ok) AS running_ok_loans,
        CAST(SUM(is_running_ok) AS REAL) * 100 / COUNT(status) AS percentage_running_ok
    FROM 
        LoanStatusByRegion
    GROUP BY 
        loan_size_category
)
SELECT 
    r.region,
    r.loan_size_category,
    r.total_loans,
    r.running_ok_loans,
    ROUND(r.percentage_running_ok, 2) AS percentage_running_ok,
    ROUND(r.avg_loan_amount, 2) AS avg_loan_amount,
    r.avg_duration,
    ROUND(o.percentage_running_ok, 2) AS overall_percentage,
    ROUND(r.percentage_running_ok - o.percentage_running_ok, 2) AS diff_from_overall
FROM 
    RegionalStats r
JOIN 
    OverallStats o ON r.loan_size_category = o.loan_size_category
ORDER BY 
    r.region, r.loan_size_category;
Permission: allowed (All required columns are permitted)
Gold SQL: WITH LoanStatusByRegion AS (
    SELECT 
        d.A3 AS region,
        l.status,
        l.amount,
        l.duration,
        CASE 
            WHEN l.status = 'C' THEN 1
            ELSE 0
        END AS is_running_ok,
        CASE 
            WHEN l.amount < 50000 THEN 'Small'
            WHEN l.amount < 100000 THEN 'Medium'
            ELSE 'Large'
        END AS loan_size_category
    FROM 
        loan l
    JOIN 
        account a ON l.account_id = a.account_id
    JOIN 
        district d ON a.district_id = d.district_id
    WHERE 
        l.amount < 100000
),
RegionalStats AS (
    SELECT 
        region,
        loan_size_category,
        COUNT(status) AS total_loans,
        SUM(is_running_ok) AS running_ok_loans,
        CAST(SUM(is_running_ok) AS REAL) * 100 / COUNT(status) AS percentage_running_ok,
        AVG(amount) AS avg_loan_amount,
        AVG(duration) AS avg_duration
    FROM 
        LoanStatusByRegion
    GROUP BY 
        region, loan_size_category
),
OverallStats AS (
    SELECT 
        loan_size_category,
        COUNT(status) AS total_loans,
        SUM(is_running_ok) AS running_ok_loans,
        CAST(SUM(is_running_ok) AS REAL) * 100 / COUNT(status) AS percentage_running_ok
    FROM 
        LoanStatusByRegion
    GROUP BY 
        loan_size_category
)
SELECT 
    r.region,
    r.loan_size_category,
    r.total_loans,
    r.running_ok_loans,
    ROUND(r.percentage_running_ok, 2) AS percentage_running_ok,
    ROUND(r.avg_loan_amount, 2) AS avg_loan_amount,
    r.avg_duration,
    ROUND(o.percentage_running_ok, 2) AS overall_percentage,
    ROUND(r.percentage_running_ok - o.percentage_running_ok, 2) AS diff_from_overall
FROM 
    RegionalStats r
JOIN 
    OverallStats o ON r.loan_size_category = o.loan_size_category
ORDER BY 
    r.region, r.loan_size_category;