Changes between Version 4 and Version 5 of SQL
- Timestamp:
- 08/28/25 12:08:36 (11 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SQL
v4 v5 1 1 == Advanced SQL Queries and Reports for Invoices 2 2 3 === 1. Report: Total Revenue Generated by Each Company in the Last Year3 === 1. Годишен Извештај за Приходи по Месеци (за секоја компанија) 4 4 5 5 {{{ 6 6 SELECT 7 c.company_id, 8 c.company_name, 9 SUM(i.total_amount) AS total_revenue 7 c.company_id, 8 c.company_name, 9 TO_CHAR(i.issue_date, 'YYYY-MM') AS month, 10 COUNT(i.invoice_id) AS num_invoices, 11 SUM(i.total_amount) AS monthly_revenue 10 12 FROM 11 Company c 12 JOIN Invoice i ON c.company_id = i.company_id 13 WHERE 14 i.issue_date BETWEEN NOW() - INTERVAL '1 year' AND NOW() 13 Invoice i 14 JOIN Company c ON c.company_id = i.company_id 15 15 GROUP BY 16 c.company_id, c.company_name16 c.company_id, c.company_name, TO_CHAR(i.issue_date, 'YYYY-MM') 17 17 ORDER BY 18 total_revenue DESC; 18 c.company_name, month; 19 19 20 }}} 20 21 21 === 2. Report: Invoices Issued to Each Client and Their Total Amount22 === 2. Извештај за Клиентски Перформанси – Побарани vs Добиени Средства 22 23 {{{ 23 24 SELECT 24 cl.client_id, 25 cl.client_name, 26 COUNT(i.invoice_id) AS total_invoices, 27 SUM(i.total_amount) AS total_amount 25 cl.client_id, 26 cl.client_name, 27 COUNT(i.invoice_id) AS total_invoices, 28 SUM(i.total_amount) AS total_requested, 29 SUM(CASE WHEN i.status = 'Paid' THEN i.total_amount ELSE 0 END) AS total_received, 30 ROUND( 31 SUM(CASE WHEN i.status = 'Paid' THEN i.total_amount ELSE 0 END) * 100.0 32 / NULLIF(SUM(i.total_amount), 0), 33 2 34 ) AS payment_conversion_rate 28 35 FROM 29 36 Client cl 30 37 JOIN Invoice i ON cl.client_id = i.client_id 31 38 GROUP BY 32 39 cl.client_id, cl.client_name 33 40 ORDER BY 34 total_amount DESC; 41 payment_conversion_rate DESC; 42 35 43 }}} 36 44 37 === 3. Report: List of Overdue Invoices45 === 3. Просечно Време до Наплата по Месеци 38 46 {{{ 39 47 SELECT 40 i.invoice_id, 41 i.issue_date, 42 i.due_date, 43 i.total_amount, 44 cl.name AS client_name, 45 c.name AS company_name 48 TO_CHAR(i.payment_date, 'YYYY-MM') AS payment_month, 49 AVG(i.payment_date - i.issue_date) AS avg_days_to_payment 46 50 FROM 47 Invoice i 48 JOIN Client cl ON i.client_id = cl.client_id 49 JOIN Company c ON i.company_id = c.company_id 51 Invoice i 50 52 WHERE 51 i.due_date < NOW() AND i.status != 'Paid' 53 i.status = 'Paid' 54 GROUP BY 55 TO_CHAR(i.payment_date, 'YYYY-MM') 52 56 ORDER BY 53 i.due_date ASC; 57 payment_month; 58 54 59 }}} 55 60 56 === 4. Report: Clients with the Highest Invoice Payments61 === 4. Извештај за Фактури по Статус и Месец 57 62 {{{ 58 63 SELECT 59 cl.client_id, 60 cl.client_name, 61 SUM(i.total_amount) AS total_paid 64 TO_CHAR(issue_date, 'YYYY-MM') AS month, 65 status, 66 COUNT(*) AS num_invoices, 67 SUM(total_amount) AS total_amount 62 68 FROM 63 Client cl 64 JOIN Invoice i ON cl.client_id = i.client_id 65 WHERE 66 i.status = 'Paid' 69 Invoice 67 70 GROUP BY 68 cl.client_id, cl.client_name71 month, status 69 72 ORDER BY 70 total_paid DESC71 LIMIT 10; 73 month, status; 74 72 75 }}} 73 76 74 === 5. Report: Outstanding Invoices by Each Client77 === 5. Месечен Извештај за Топ Клиенти по Приходи 75 78 {{{ 76 79 SELECT 77 cl.client_id,78 cl.client_name,79 COUNT(i.invoice_id) AS outstanding_invoices,80 SUM(i.total_amount) AS outstanding_amount80 TO_CHAR(i.issue_date, 'YYYY-MM') AS month, 81 cl.client_id, 82 cl.client_name, 83 SUM(i.total_amount) AS monthly_revenue 81 84 FROM 82 Client cl 83 JOIN Invoice i ON cl.client_id = i.client_id 84 WHERE 85 i.status = 'Unpaid' 85 Invoice i 86 JOIN Client cl ON i.client_id = cl.client_id 86 87 GROUP BY 87 88 month, cl.client_id, cl.client_name 88 89 ORDER BY 89 outstanding_amount DESC; 90 month, monthly_revenue DESC; 91 90 92 }}} 91 93 92 === 6. Report: Monthly Invoice Revenue94 === 6. Извештај за Фактури со Попуст по Месец и Клиент 93 95 {{{ 94 96 SELECT 95 TO_CHAR(i.issue_date, 'YYYY-MM') AS month, 96 SUM(i.total_amount) AS total_revenue 97 TO_CHAR(i.issue_date, 'YYYY-MM') AS month, 98 cl.client_name, 99 COUNT(*) AS num_discounted_invoices, 100 SUM(i.total_amount * i.discount_percentage / 100.0) AS total_discount_value 97 101 FROM 98 Invoice i 102 Invoice i 103 JOIN Client cl ON i.client_id = cl.client_id 104 WHERE 105 i.discount_percentage > 0 99 106 GROUP BY 100 TO_CHAR(i.issue_date, 'YYYY-MM')107 month, cl.client_name 101 108 ORDER BY 102 month DESC; 109 total_discount_value DESC; 110 103 111 }}} 104 112 105 == 7. Report: Top 5 Products/Services Sold by Revenue113 == 7. Извештај за Просечна Вредност на Фактура по Компанија 106 114 {{{ 107 115 SELECT 108 l.description AS product_name, 109 SUM(l.quantity * l.unit_price) AS total_revenue 116 c.company_id, 117 c.company_name, 118 COUNT(i.invoice_id) AS total_invoices, 119 ROUND(AVG(i.total_amount), 2) AS avg_invoice_value 110 120 FROM 111 LineItem l 121 Company c 122 JOIN Invoice i ON c.company_id = i.company_id 112 123 GROUP BY 113 l.description124 c.company_id, c.company_name 114 125 ORDER BY 115 total_revenue DESC116 LIMIT 5; 126 avg_invoice_value DESC; 127 117 128 }}} 118 129 119 === 8. Report: Invoices with the Most Line Items130 === 8. Вкупна Наплата во Последните 12 Месеци по Клиент 120 131 {{{ 121 132 SELECT 122 i.invoice_id, 123 i.issue_date, 124 i.total_amount, 125 COUNT(l.line_item_id) AS line_item_count 133 cl.client_name, 134 SUM(p.amount) AS total_paid 126 135 FROM 127 Invoice i 128 JOIN LineItem l ON i.invoice_id = l.invoice_id 136 Payment p 137 JOIN Invoice i ON p.invoice_id = i.invoice_id 138 JOIN Client cl ON i.client_id = cl.client_id 139 WHERE 140 p.payment_date >= CURRENT_DATE - INTERVAL '12 months' 129 141 GROUP BY 130 i.invoice_id, i.issue_date, i.total_amount142 cl.client_name 131 143 ORDER BY 132 line_item_count DESC133 LIMIT 10; 144 total_paid DESC; 145 134 146 }}} 135 147 136 == 9. Report: Average Time to Payment148 == 9. Просечно време до плаќање 137 149 {{{ 138 150 SELECT … … 143 155 i.status = 'Paid'; 144 156 }}} 145 146 === 10. Report: Invoices with Discounts Applied147 {{{148 SELECT149 i.invoice_id,150 i.issue_date,151 i.total_amount,152 i.discount_percentage,153 (i.total_amount * i.discount_percentage / 100) AS discount_amount154 FROM155 Invoice i156 WHERE157 i.discount_percentage > 0158 ORDER BY159 discount_amount DESC;160 }}}