| Version 2 (modified by , 9 months ago) ( diff ) |
|---|
Advanced SQL Queries and Reports for Invoices
1. Report: Total Revenue Generated by Each Company in the Last Year
SELECT
c.company_id,
c.name AS company_name,
SUM(i.total_amount) AS total_revenue
FROM
Company c
JOIN Invoice i ON c.company_id = i.company_id
WHERE
i.issue_date BETWEEN NOW() - INTERVAL '1 year' AND NOW()
GROUP BY
c.company_id, c.name
ORDER BY
total_revenue DESC;
2. Report: Invoices Issued to Each Client and Their Total Amount
SELECT
cl.client_id,
cl.name AS client_name,
COUNT(i.invoice_id) AS total_invoices,
SUM(i.total_amount) AS total_amount
FROM
Client cl
JOIN Invoice i ON cl.client_id = i.client_id
GROUP BY
cl.client_id, cl.name
ORDER BY
total_amount DESC;
3. Report: List of Overdue Invoices
SELECT
i.invoice_id,
i.issue_date,
i.due_date,
i.total_amount,
cl.name AS client_name,
c.name AS company_name
FROM
Invoice i
JOIN Client cl ON i.client_id = cl.client_id
JOIN Company c ON i.company_id = c.company_id
WHERE
i.due_date < NOW() AND i.status != 'Paid'
ORDER BY
i.due_date ASC;
4. Report: Clients with the Highest Invoice Payments
SELECT
cl.client_id,
cl.name AS client_name,
SUM(i.total_amount) AS total_paid
FROM
Client cl
JOIN Invoice i ON cl.client_id = i.client_id
WHERE
i.status = 'Paid'
GROUP BY
cl.client_id, cl.name
ORDER BY
total_paid DESC
LIMIT 10;
5. Report: Outstanding Invoices by Each Client
SELECT
cl.client_id,
cl.name AS client_name,
COUNT(i.invoice_id) AS outstanding_invoices,
SUM(i.total_amount) AS outstanding_amount
FROM
Client cl
JOIN Invoice i ON cl.client_id = i.client_id
WHERE
i.status = 'Unpaid'
GROUP BY
cl.client_id, cl.name
ORDER BY
outstanding_amount DESC;
6. Report: Monthly Invoice Revenue
SELECT
TO_CHAR(i.issue_date, 'YYYY-MM') AS month,
SUM(i.total_amount) AS total_revenue
FROM
Invoice i
GROUP BY
TO_CHAR(i.issue_date, 'YYYY-MM')
ORDER BY
month DESC;
7. Report: Top 5 Products/Services Sold by Revenue
SELECT
l.description AS product_name,
SUM(l.quantity * l.unit_price) AS total_revenue
FROM
LineItem l
GROUP BY
l.description
ORDER BY
total_revenue DESC
LIMIT 5;
8. Report: Invoices with the Most Line Items
SELECT
i.invoice_id,
i.issue_date,
i.total_amount,
COUNT(l.line_item_id) AS line_item_count
FROM
Invoice i
JOIN LineItem l ON i.invoice_id = l.invoice_id
GROUP BY
i.invoice_id, i.issue_date, i.total_amount
ORDER BY
line_item_count DESC
LIMIT 10;
9. Report: Average Time to Payment
SELECT
AVG(i.payment_date - i.issue_date) AS avg_days_to_payment
FROM
Invoice i
WHERE
i.status = 'Paid';
10. Report: Invoices with Discounts Applied
SELECT
i.invoice_id,
i.issue_date,
i.total_amount,
i.discount_percentage,
(i.total_amount * i.discount_percentage / 100) AS discount_amount
FROM
Invoice i
WHERE
i.discount_percentage > 0
ORDER BY
discount_amount DESC;
Note:
See TracWiki
for help on using the wiki.
