wiki:SQL

Advanced SQL Queries and Reports for Invoices

1. Годишна споредба на приходи

WITH revenue_by_year AS (
  SELECT 
    EXTRACT(YEAR FROM issue_date) AS year,
    SUM(total_amount) AS total_revenue
  FROM 
    Invoice
  GROUP BY 
    EXTRACT(YEAR FROM issue_date)
)
SELECT 
  current.year AS current_year,
  current.total_revenue AS current_revenue,
  previous.total_revenue AS previous_revenue,
  ROUND(
    (current.total_revenue - previous.total_revenue) * 100.0 / NULLIF(previous.total_revenue, 0),
    2
  ) AS growth_percentage
FROM 
  revenue_by_year current
LEFT JOIN 
  revenue_by_year previous ON current.year = previous.year + 1
ORDER BY current_year DESC
LIMIT 1;

2. Финансиски преглед на агенцијата (тековна година)

SELECT 
  COUNT(DISTINCT c.client_id) AS total_clients,
  COUNT(i.invoice_id) AS total_invoices,
  SUM(i.total_amount) AS total_revenue,
  SUM(i.invoice_taxes) AS total_tax_collected,
  ROUND(AVG(i.total_amount), 2) AS avg_invoice_value
FROM 
  Invoice i
JOIN Client c ON i.client_id = c.client_id
WHERE 
  EXTRACT(YEAR FROM i.issue_date) = EXTRACT(YEAR FROM CURRENT_DATE);

3. Најуспешна компанија според просечна вредност на фактури

SELECT 
  c.company_id,
  c.company_name,
  ROUND(AVG(i.total_amount), 2) AS avg_invoice_amount,
  COUNT(i.invoice_id) AS invoice_count
FROM 
  Invoice i
JOIN Company c ON i.company_id = c.company_id
GROUP BY 
  c.company_id, c.company_name
ORDER BY 
  avg_invoice_amount DESC
LIMIT 5;

4. Годишен Извештај за Приходи по Месеци (за секоја компанија)

SELECT 
  c.company_id,
  c.company_name,
  TO_CHAR(i.issue_date, 'YYYY-MM') AS month,
  COUNT(i.invoice_id) AS num_invoices,
  SUM(i.total_amount) AS monthly_revenue
FROM 
  Invoice i
JOIN Company c ON c.company_id = i.company_id
GROUP BY 
  c.company_id, c.company_name, TO_CHAR(i.issue_date, 'YYYY-MM')
ORDER BY 
  c.company_name, month;

5. Извештај за Клиентски Перформанси – Побарани vs Добиени Средства

SELECT 
  cl.client_id,
  cl.client_name,
  COUNT(i.invoice_id) AS total_invoices,
  SUM(i.total_amount) AS total_requested,
  SUM(CASE WHEN i.status = 'Paid' THEN i.total_amount ELSE 0 END) AS total_received,
  ROUND(
    SUM(CASE WHEN i.status = 'Paid' THEN i.total_amount ELSE 0 END) * 100.0 
    / NULLIF(SUM(i.total_amount), 0), 
    2
  ) AS payment_conversion_rate
FROM 
  Client cl
JOIN Invoice i ON cl.client_id = i.client_id
GROUP BY 
  cl.client_id, cl.client_name
ORDER BY 
  payment_conversion_rate DESC;

6. Просечно Време до Наплата по Месеци

SELECT 
  TO_CHAR(i.payment_date, 'YYYY-MM') AS payment_month,
  AVG(i.payment_date - i.issue_date) AS avg_days_to_payment
FROM 
  Invoice i
WHERE 
  i.status = 'Paid'
GROUP BY 
  TO_CHAR(i.payment_date, 'YYYY-MM')
ORDER BY 
  payment_month;

7. Извештај за Фактури по Статус и Месец

SELECT 
  TO_CHAR(issue_date, 'YYYY-MM') AS month,
  status,
  COUNT(*) AS num_invoices,
  SUM(total_amount) AS total_amount
FROM 
  Invoice
GROUP BY 
  month, status
ORDER BY 
  month, status;

8. Месечен Извештај за Топ Клиенти по Приходи

SELECT 
  TO_CHAR(i.issue_date, 'YYYY-MM') AS month,
  cl.client_id,
  cl.client_name,
  SUM(i.total_amount) AS monthly_revenue
FROM 
  Invoice i
JOIN Client cl ON i.client_id = cl.client_id
GROUP BY 
  month, cl.client_id, cl.client_name
ORDER BY 
  month, monthly_revenue DESC;

9. Извештај за Фактури со Попуст по Месец и Клиент

SELECT 
  TO_CHAR(i.issue_date, 'YYYY-MM') AS month,
  cl.client_name,
  COUNT(*) AS num_discounted_invoices,
  SUM(i.total_amount * i.discount_percentage / 100.0) AS total_discount_value
FROM 
  Invoice i
JOIN Client cl ON i.client_id = cl.client_id
WHERE 
  i.discount_percentage > 0
GROUP BY 
  month, cl.client_name
ORDER BY 
  total_discount_value DESC;

10. Извештај за Просечна Вредност на Фактура по Компанија

SELECT 
  c.company_id,
  c.company_name,
  COUNT(i.invoice_id) AS total_invoices,
  ROUND(AVG(i.total_amount), 2) AS avg_invoice_value
FROM 
  Company c
JOIN Invoice i ON c.company_id = i.company_id
GROUP BY 
  c.company_id, c.company_name
ORDER BY 
  avg_invoice_value DESC;

11. Вкупна Наплата во Последните 12 Месеци по Клиент

SELECT 
    cl.client_name,
    SUM(p.amount) AS total_paid
FROM 
    Payment p
JOIN Invoice i ON p.invoice_id = i.invoice_id
JOIN Client cl ON i.client_id = cl.client_id
WHERE 
    p.payment_date >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY 
    cl.client_name
ORDER BY 
    total_paid DESC;

12. Просечно време до плаќање

SELECT 
    AVG(i.payment_date - i.issue_date) AS avg_days_to_payment
FROM 
    Invoice i
WHERE 
    i.status = 'Paid';
Last modified 7 days ago Last modified on 09/01/25 12:12:25
Note: See TracWiki for help on using the wiki.