Chapter 25: PostgreSQL SUM Function
Part 1: What is the SUM Function?
The SUM function calculates the total sum of a numeric column or expression. It’s an aggregate function that ignores NULL values (treats them as 0 for the sum).
The Basic Syntax
|
0 1 2 3 4 5 6 7 8 |
<span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>column_name<span class="token punctuation">)</span> <span class="token keyword">FROM</span> table_name<span class="token punctuation">;</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>expression<span class="token punctuation">)</span> <span class="token keyword">FROM</span> table_name<span class="token punctuation">;</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span><span class="token keyword">DISTINCT</span> column_name<span class="token punctuation">)</span> <span class="token keyword">FROM</span> table_name<span class="token punctuation">;</span> <span class="token comment">-- Sums unique values only</span> |
Part 2: Setting Up Our Example Data
Let’s create a comprehensive sales and inventory database to explore all the ways SUM can be used:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
<span class="token comment">-- Create a complete e-commerce database</span> <span class="token keyword">CREATE</span> <span class="token keyword">TABLE</span> products <span class="token punctuation">(</span> product_id <span class="token keyword">SERIAL</span> <span class="token keyword">PRIMARY</span> <span class="token keyword">KEY</span><span class="token punctuation">,</span> name <span class="token keyword">VARCHAR</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">,</span> category <span class="token keyword">VARCHAR</span><span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">,</span> price <span class="token keyword">DECIMAL</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> cost <span class="token keyword">DECIMAL</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> stock_quantity <span class="token keyword">INTEGER</span><span class="token punctuation">,</span> reorder_point <span class="token keyword">INTEGER</span><span class="token punctuation">,</span> discontinued <span class="token keyword">BOOLEAN</span> <span class="token keyword">DEFAULT</span> <span class="token boolean">FALSE</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">CREATE</span> <span class="token keyword">TABLE</span> customers <span class="token punctuation">(</span> customer_id <span class="token keyword">SERIAL</span> <span class="token keyword">PRIMARY</span> <span class="token keyword">KEY</span><span class="token punctuation">,</span> first_name <span class="token keyword">VARCHAR</span><span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">,</span> last_name <span class="token keyword">VARCHAR</span><span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">,</span> city <span class="token keyword">VARCHAR</span><span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">,</span> state <span class="token keyword">VARCHAR</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> signup_date <span class="token keyword">DATE</span><span class="token punctuation">,</span> credit_limit <span class="token keyword">DECIMAL</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">CREATE</span> <span class="token keyword">TABLE</span> orders <span class="token punctuation">(</span> order_id <span class="token keyword">SERIAL</span> <span class="token keyword">PRIMARY</span> <span class="token keyword">KEY</span><span class="token punctuation">,</span> customer_id <span class="token keyword">INTEGER</span> <span class="token keyword">REFERENCES</span> customers<span class="token punctuation">(</span>customer_id<span class="token punctuation">)</span><span class="token punctuation">,</span> order_date <span class="token keyword">DATE</span><span class="token punctuation">,</span> <span class="token keyword">status</span> <span class="token keyword">VARCHAR</span><span class="token punctuation">(</span><span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">,</span> shipping_cost <span class="token keyword">DECIMAL</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> tax_amount <span class="token keyword">DECIMAL</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">CREATE</span> <span class="token keyword">TABLE</span> order_items <span class="token punctuation">(</span> order_item_id <span class="token keyword">SERIAL</span> <span class="token keyword">PRIMARY</span> <span class="token keyword">KEY</span><span class="token punctuation">,</span> order_id <span class="token keyword">INTEGER</span> <span class="token keyword">REFERENCES</span> orders<span class="token punctuation">(</span>order_id<span class="token punctuation">)</span><span class="token punctuation">,</span> product_id <span class="token keyword">INTEGER</span> <span class="token keyword">REFERENCES</span> products<span class="token punctuation">(</span>product_id<span class="token punctuation">)</span><span class="token punctuation">,</span> quantity <span class="token keyword">INTEGER</span><span class="token punctuation">,</span> unit_price <span class="token keyword">DECIMAL</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> discount <span class="token keyword">DECIMAL</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">DEFAULT</span> <span class="token number">0</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">CREATE</span> <span class="token keyword">TABLE</span> payments <span class="token punctuation">(</span> payment_id <span class="token keyword">SERIAL</span> <span class="token keyword">PRIMARY</span> <span class="token keyword">KEY</span><span class="token punctuation">,</span> order_id <span class="token keyword">INTEGER</span> <span class="token keyword">REFERENCES</span> orders<span class="token punctuation">(</span>order_id<span class="token punctuation">)</span><span class="token punctuation">,</span> payment_date <span class="token keyword">DATE</span><span class="token punctuation">,</span> amount <span class="token keyword">DECIMAL</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> payment_method <span class="token keyword">VARCHAR</span><span class="token punctuation">(</span><span class="token number">20</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">CREATE</span> <span class="token keyword">TABLE</span> inventory_transactions <span class="token punctuation">(</span> transaction_id <span class="token keyword">SERIAL</span> <span class="token keyword">PRIMARY</span> <span class="token keyword">KEY</span><span class="token punctuation">,</span> product_id <span class="token keyword">INTEGER</span> <span class="token keyword">REFERENCES</span> products<span class="token punctuation">(</span>product_id<span class="token punctuation">)</span><span class="token punctuation">,</span> transaction_date <span class="token keyword">DATE</span><span class="token punctuation">,</span> quantity_change <span class="token keyword">INTEGER</span><span class="token punctuation">,</span> transaction_type <span class="token keyword">VARCHAR</span><span class="token punctuation">(</span><span class="token number">20</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">-- Insert products</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> products <span class="token punctuation">(</span>name<span class="token punctuation">,</span> category<span class="token punctuation">,</span> price<span class="token punctuation">,</span> cost<span class="token punctuation">,</span> stock_quantity<span class="token punctuation">,</span> reorder_point<span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token string">'Wireless Headphones'</span><span class="token punctuation">,</span> <span class="token string">'Electronics'</span><span class="token punctuation">,</span> <span class="token number">89.99</span><span class="token punctuation">,</span> <span class="token number">45.00</span><span class="token punctuation">,</span> <span class="token number">45</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Gaming Mouse'</span><span class="token punctuation">,</span> <span class="token string">'Electronics'</span><span class="token punctuation">,</span> <span class="token number">49.99</span><span class="token punctuation">,</span> <span class="token number">25.00</span><span class="token punctuation">,</span> <span class="token number">120</span><span class="token punctuation">,</span> <span class="token number">30</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Mechanical Keyboard'</span><span class="token punctuation">,</span> <span class="token string">'Electronics'</span><span class="token punctuation">,</span> <span class="token number">129.99</span><span class="token punctuation">,</span> <span class="token number">65.00</span><span class="token punctuation">,</span> <span class="token number">35</span><span class="token punctuation">,</span> <span class="token number">15</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'4K Monitor'</span><span class="token punctuation">,</span> <span class="token string">'Electronics'</span><span class="token punctuation">,</span> <span class="token number">399.99</span><span class="token punctuation">,</span> <span class="token number">200.00</span><span class="token punctuation">,</span> <span class="token number">18</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'USB-C Hub'</span><span class="token punctuation">,</span> <span class="token string">'Electronics'</span><span class="token punctuation">,</span> <span class="token number">39.99</span><span class="token punctuation">,</span> <span class="token number">20.00</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Coffee Maker'</span><span class="token punctuation">,</span> <span class="token string">'Appliances'</span><span class="token punctuation">,</span> <span class="token number">79.99</span><span class="token punctuation">,</span> <span class="token number">40.00</span><span class="token punctuation">,</span> <span class="token number">30</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Blender'</span><span class="token punctuation">,</span> <span class="token string">'Appliances'</span><span class="token punctuation">,</span> <span class="token number">129.99</span><span class="token punctuation">,</span> <span class="token number">65.00</span><span class="token punctuation">,</span> <span class="token number">22</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Toaster'</span><span class="token punctuation">,</span> <span class="token string">'Appliances'</span><span class="token punctuation">,</span> <span class="token number">34.99</span><span class="token punctuation">,</span> <span class="token number">17.50</span><span class="token punctuation">,</span> <span class="token number">55</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Air Fryer'</span><span class="token punctuation">,</span> <span class="token string">'Appliances'</span><span class="token punctuation">,</span> <span class="token number">149.99</span><span class="token punctuation">,</span> <span class="token number">75.00</span><span class="token punctuation">,</span> <span class="token number">15</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Microwave'</span><span class="token punctuation">,</span> <span class="token string">'Appliances'</span><span class="token punctuation">,</span> <span class="token number">199.99</span><span class="token punctuation">,</span> <span class="token number">100.00</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Desk Chair'</span><span class="token punctuation">,</span> <span class="token string">'Furniture'</span><span class="token punctuation">,</span> <span class="token number">249.99</span><span class="token punctuation">,</span> <span class="token number">125.00</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Standing Desk'</span><span class="token punctuation">,</span> <span class="token string">'Furniture'</span><span class="token punctuation">,</span> <span class="token number">499.99</span><span class="token punctuation">,</span> <span class="token number">250.00</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Bookshelf'</span><span class="token punctuation">,</span> <span class="token string">'Furniture'</span><span class="token punctuation">,</span> <span class="token number">159.99</span><span class="token punctuation">,</span> <span class="token number">80.00</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Lamp'</span><span class="token punctuation">,</span> <span class="token string">'Furniture'</span><span class="token punctuation">,</span> <span class="token number">45.99</span><span class="token punctuation">,</span> <span class="token number">23.00</span><span class="token punctuation">,</span> <span class="token number">40</span><span class="token punctuation">,</span> <span class="token number">15</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Office Cabinet'</span><span class="token punctuation">,</span> <span class="token string">'Furniture'</span><span class="token punctuation">,</span> <span class="token number">189.99</span><span class="token punctuation">,</span> <span class="token number">95.00</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">-- Insert customers</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> customers <span class="token punctuation">(</span>first_name<span class="token punctuation">,</span> last_name<span class="token punctuation">,</span> city<span class="token punctuation">,</span> state<span class="token punctuation">,</span> signup_date<span class="token punctuation">,</span> credit_limit<span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token string">'Alice'</span><span class="token punctuation">,</span> <span class="token string">'Johnson'</span><span class="token punctuation">,</span> <span class="token string">'Austin'</span><span class="token punctuation">,</span> <span class="token string">'TX'</span><span class="token punctuation">,</span> <span class="token string">'2023-01-15'</span><span class="token punctuation">,</span> <span class="token number">5000.00</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Bob'</span><span class="token punctuation">,</span> <span class="token string">'Smith'</span><span class="token punctuation">,</span> <span class="token string">'Dallas'</span><span class="token punctuation">,</span> <span class="token string">'TX'</span><span class="token punctuation">,</span> <span class="token string">'2023-02-20'</span><span class="token punctuation">,</span> <span class="token number">3000.00</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Carol'</span><span class="token punctuation">,</span> <span class="token string">'White'</span><span class="token punctuation">,</span> <span class="token string">'Houston'</span><span class="token punctuation">,</span> <span class="token string">'TX'</span><span class="token punctuation">,</span> <span class="token string">'2023-03-10'</span><span class="token punctuation">,</span> <span class="token number">4000.00</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'David'</span><span class="token punctuation">,</span> <span class="token string">'Brown'</span><span class="token punctuation">,</span> <span class="token string">'San Antonio'</span><span class="token punctuation">,</span> <span class="token string">'TX'</span><span class="token punctuation">,</span> <span class="token string">'2023-01-05'</span><span class="token punctuation">,</span> <span class="token number">2000.00</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Eva'</span><span class="token punctuation">,</span> <span class="token string">'Green'</span><span class="token punctuation">,</span> <span class="token string">'Austin'</span><span class="token punctuation">,</span> <span class="token string">'TX'</span><span class="token punctuation">,</span> <span class="token string">'2023-04-12'</span><span class="token punctuation">,</span> <span class="token number">3500.00</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Frank'</span><span class="token punctuation">,</span> <span class="token string">'Black'</span><span class="token punctuation">,</span> <span class="token string">'Dallas'</span><span class="token punctuation">,</span> <span class="token string">'TX'</span><span class="token punctuation">,</span> <span class="token string">'2023-05-18'</span><span class="token punctuation">,</span> <span class="token number">2500.00</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Grace'</span><span class="token punctuation">,</span> <span class="token string">'Lee'</span><span class="token punctuation">,</span> <span class="token string">'Houston'</span><span class="token punctuation">,</span> <span class="token string">'TX'</span><span class="token punctuation">,</span> <span class="token string">'2023-06-22'</span><span class="token punctuation">,</span> <span class="token number">1500.00</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Henry'</span><span class="token punctuation">,</span> <span class="token string">'Ford'</span><span class="token punctuation">,</span> <span class="token string">'Austin'</span><span class="token punctuation">,</span> <span class="token string">'TX'</span><span class="token punctuation">,</span> <span class="token string">'2023-07-30'</span><span class="token punctuation">,</span> <span class="token number">6000.00</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Iris'</span><span class="token punctuation">,</span> <span class="token string">'West'</span><span class="token punctuation">,</span> <span class="token string">'Dallas'</span><span class="token punctuation">,</span> <span class="token string">'TX'</span><span class="token punctuation">,</span> <span class="token string">'2023-08-14'</span><span class="token punctuation">,</span> <span class="token number">2800.00</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">'Jack'</span><span class="token punctuation">,</span> <span class="token string">'Ryan'</span><span class="token punctuation">,</span> <span class="token string">'Houston'</span><span class="token punctuation">,</span> <span class="token string">'TX'</span><span class="token punctuation">,</span> <span class="token string">'2023-09-05'</span><span class="token punctuation">,</span> <span class="token number">3200.00</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">-- Insert orders (with realistic spread over time)</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> orders <span class="token punctuation">(</span>customer_id<span class="token punctuation">,</span> order_date<span class="token punctuation">,</span> <span class="token keyword">status</span><span class="token punctuation">,</span> shipping_cost<span class="token punctuation">,</span> tax_amount<span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'2024-01-15'</span><span class="token punctuation">,</span> <span class="token string">'delivered'</span><span class="token punctuation">,</span> <span class="token number">5.99</span><span class="token punctuation">,</span> <span class="token number">7.50</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'2024-01-17'</span><span class="token punctuation">,</span> <span class="token string">'delivered'</span><span class="token punctuation">,</span> <span class="token number">5.99</span><span class="token punctuation">,</span> <span class="token number">4.20</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">'2024-01-18'</span><span class="token punctuation">,</span> <span class="token string">'delivered'</span><span class="token punctuation">,</span> <span class="token number">0.00</span><span class="token punctuation">,</span> <span class="token number">8.30</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'2024-01-20'</span><span class="token punctuation">,</span> <span class="token string">'delivered'</span><span class="token punctuation">,</span> <span class="token number">5.99</span><span class="token punctuation">,</span> <span class="token number">3.10</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token string">'2024-01-22'</span><span class="token punctuation">,</span> <span class="token string">'delivered'</span><span class="token punctuation">,</span> <span class="token number">5.99</span><span class="token punctuation">,</span> <span class="token number">5.80</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'2024-01-25'</span><span class="token punctuation">,</span> <span class="token string">'delivered'</span><span class="token punctuation">,</span> <span class="token number">0.00</span><span class="token punctuation">,</span> <span class="token number">12.50</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'2024-01-27'</span><span class="token punctuation">,</span> <span class="token string">'delivered'</span><span class="token punctuation">,</span> <span class="token number">5.99</span><span class="token punctuation">,</span> <span class="token number">2.90</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token string">'2024-01-28'</span><span class="token punctuation">,</span> <span class="token string">'delivered'</span><span class="token punctuation">,</span> <span class="token number">5.99</span><span class="token punctuation">,</span> <span class="token number">4.60</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">7</span><span class="token punctuation">,</span> <span class="token string">'2024-01-30'</span><span class="token punctuation">,</span> <span class="token string">'delivered'</span><span class="token punctuation">,</span> <span class="token number">5.99</span><span class="token punctuation">,</span> <span class="token number">1.80</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span> <span class="token string">'2024-02-01'</span><span class="token punctuation">,</span> <span class="token string">'delivered'</span><span class="token punctuation">,</span> <span class="token number">0.00</span><span class="token punctuation">,</span> <span class="token number">15.20</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">'2024-02-03'</span><span class="token punctuation">,</span> <span class="token string">'shipped'</span><span class="token punctuation">,</span> <span class="token number">5.99</span><span class="token punctuation">,</span> <span class="token number">5.40</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'2024-02-05'</span><span class="token punctuation">,</span> <span class="token string">'shipped'</span><span class="token punctuation">,</span> <span class="token number">5.99</span><span class="token punctuation">,</span> <span class="token number">2.20</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">9</span><span class="token punctuation">,</span> <span class="token string">'2024-02-06'</span><span class="token punctuation">,</span> <span class="token string">'shipped'</span><span class="token punctuation">,</span> <span class="token number">5.99</span><span class="token punctuation">,</span> <span class="token number">3.70</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token string">'2024-02-08'</span><span class="token punctuation">,</span> <span class="token string">'processing'</span><span class="token punctuation">,</span> <span class="token number">5.99</span><span class="token punctuation">,</span> <span class="token number">4.10</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'2024-02-10'</span><span class="token punctuation">,</span> <span class="token string">'processing'</span><span class="token punctuation">,</span> <span class="token number">0.00</span><span class="token punctuation">,</span> <span class="token number">8.90</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'2024-02-12'</span><span class="token punctuation">,</span> <span class="token string">'pending'</span><span class="token punctuation">,</span> <span class="token number">5.99</span><span class="token punctuation">,</span> <span class="token number">1.50</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token string">'2024-02-13'</span><span class="token punctuation">,</span> <span class="token string">'pending'</span><span class="token punctuation">,</span> <span class="token number">5.99</span><span class="token punctuation">,</span> <span class="token number">6.20</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">-- Insert order items (each order has 1-3 items)</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> order_items <span class="token punctuation">(</span>order_id<span class="token punctuation">,</span> product_id<span class="token punctuation">,</span> quantity<span class="token punctuation">,</span> unit_price<span class="token punctuation">,</span> discount<span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token comment">-- Order 1</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">89.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">129.99</span><span class="token punctuation">,</span> <span class="token number">0.10</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 2</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">39.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 3</span> <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">79.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">34.99</span><span class="token punctuation">,</span> <span class="token number">0.15</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 4</span> <span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">249.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 5</span> <span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">49.99</span><span class="token punctuation">,</span> <span class="token number">0.05</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">399.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 6</span> <span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">129.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">9</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">149.99</span><span class="token punctuation">,</span> <span class="token number">0.10</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">199.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 7</span> <span class="token punctuation">(</span><span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">499.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 8</span> <span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">13</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">159.99</span><span class="token punctuation">,</span> <span class="token number">0.20</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">14</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">45.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 9</span> <span class="token punctuation">(</span><span class="token number">9</span><span class="token punctuation">,</span> <span class="token number">15</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">189.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 10</span> <span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">89.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">49.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">129.99</span><span class="token punctuation">,</span> <span class="token number">0.10</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 11</span> <span class="token punctuation">(</span><span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">399.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">39.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 12</span> <span class="token punctuation">(</span><span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">79.99</span><span class="token punctuation">,</span> <span class="token number">0.10</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 13</span> <span class="token punctuation">(</span><span class="token number">13</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">129.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">13</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">34.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 14</span> <span class="token punctuation">(</span><span class="token number">14</span><span class="token punctuation">,</span> <span class="token number">9</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">149.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 15</span> <span class="token punctuation">(</span><span class="token number">15</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">199.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">15</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">249.99</span><span class="token punctuation">,</span> <span class="token number">0.15</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 16</span> <span class="token punctuation">(</span><span class="token number">16</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">499.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">-- Order 17</span> <span class="token punctuation">(</span><span class="token number">17</span><span class="token punctuation">,</span> <span class="token number">13</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">159.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">17</span><span class="token punctuation">,</span> <span class="token number">14</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">45.99</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">17</span><span class="token punctuation">,</span> <span class="token number">15</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">189.99</span><span class="token punctuation">,</span> <span class="token number">0.10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">-- Insert payments (some orders paid, some not)</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> payments <span class="token punctuation">(</span>order_id<span class="token punctuation">,</span> payment_date<span class="token punctuation">,</span> amount<span class="token punctuation">,</span> payment_method<span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'2024-01-15'</span><span class="token punctuation">,</span> <span class="token number">250.00</span><span class="token punctuation">,</span> <span class="token string">'credit_card'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'2024-01-16'</span><span class="token punctuation">,</span> <span class="token number">75.47</span><span class="token punctuation">,</span> <span class="token string">'credit_card'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'2024-01-17'</span><span class="token punctuation">,</span> <span class="token number">119.97</span><span class="token punctuation">,</span> <span class="token string">'paypal'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">'2024-01-18'</span><span class="token punctuation">,</span> <span class="token number">134.47</span><span class="token punctuation">,</span> <span class="token string">'credit_card'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'2024-01-20'</span><span class="token punctuation">,</span> <span class="token number">249.99</span><span class="token punctuation">,</span> <span class="token string">'debit_card'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token string">'2024-01-22'</span><span class="token punctuation">,</span> <span class="token number">499.96</span><span class="token punctuation">,</span> <span class="token string">'credit_card'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token string">'2024-01-25'</span><span class="token punctuation">,</span> <span class="token number">479.97</span><span class="token punctuation">,</span> <span class="token string">'paypal'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">7</span><span class="token punctuation">,</span> <span class="token string">'2024-01-27'</span><span class="token punctuation">,</span> <span class="token number">499.99</span><span class="token punctuation">,</span> <span class="token string">'credit_card'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span> <span class="token string">'2024-01-28'</span><span class="token punctuation">,</span> <span class="token number">317.96</span><span class="token punctuation">,</span> <span class="token string">'debit_card'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">9</span><span class="token punctuation">,</span> <span class="token string">'2024-01-30'</span><span class="token punctuation">,</span> <span class="token number">189.99</span><span class="token punctuation">,</span> <span class="token string">'credit_card'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token string">'2024-02-01'</span><span class="token punctuation">,</span> <span class="token number">269.97</span><span class="token punctuation">,</span> <span class="token string">'paypal'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">-- Insert inventory transactions</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> inventory_transactions <span class="token punctuation">(</span>product_id<span class="token punctuation">,</span> transaction_date<span class="token punctuation">,</span> quantity_change<span class="token punctuation">,</span> transaction_type<span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'2024-01-01'</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token string">'restock'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'2024-01-15'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'sale'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'2024-01-25'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'sale'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'2024-02-01'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'sale'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'2024-01-01'</span><span class="token punctuation">,</span> <span class="token number">150</span><span class="token punctuation">,</span> <span class="token string">'restock'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'2024-01-22'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'sale'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'2024-02-01'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'sale'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">'2024-01-01'</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">,</span> <span class="token string">'restock'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">'2024-01-15'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'sale'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">'2024-02-01'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'sale'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'2024-01-01'</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">,</span> <span class="token string">'restock'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'2024-01-22'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'sale'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'2024-02-03'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'sale'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token string">'2024-01-01'</span><span class="token punctuation">,</span> <span class="token number">250</span><span class="token punctuation">,</span> <span class="token string">'restock'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token string">'2024-01-17'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">'sale'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token string">'2024-02-03'</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'sale'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
Part 3: Basic SUM Usage
1. Summing a Single Column
|
0 1 2 3 4 5 6 7 8 |
<span class="token comment">-- Calculate total revenue from all orders (based on order_items)</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>quantity <span class="token operator">*</span> unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> total_revenue <span class="token keyword">FROM</span> order_items<span class="token punctuation">;</span> |
Result:
| total_revenue |
|---|
| 5847.52 |
2. Sum with WHERE Clause
|
0 1 2 3 4 5 6 7 8 9 10 |
<span class="token comment">-- Calculate revenue from delivered orders only</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> delivered_revenue <span class="token keyword">FROM</span> order_items oi <span class="token keyword">JOIN</span> orders o <span class="token keyword">ON</span> oi<span class="token punctuation">.</span>order_id <span class="token operator">=</span> o<span class="token punctuation">.</span>order_id <span class="token keyword">WHERE</span> o<span class="token punctuation">.</span><span class="token keyword">status</span> <span class="token operator">=</span> <span class="token string">'delivered'</span><span class="token punctuation">;</span> |
Result:
| delivered_revenue |
|---|
| 3521.78 |
3. Sum with NULL Handling
|
0 1 2 3 4 5 6 7 8 9 10 11 |
<span class="token comment">-- SUM ignores NULLs automatically</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>shipping_cost<span class="token punctuation">)</span> <span class="token keyword">AS</span> total_shipping<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>tax_amount<span class="token punctuation">)</span> <span class="token keyword">AS</span> total_tax<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>shipping_cost<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token function">SUM</span><span class="token punctuation">(</span>tax_amount<span class="token punctuation">)</span> <span class="token keyword">AS</span> shipping_plus_tax <span class="token keyword">FROM</span> orders<span class="token punctuation">;</span> |
Result:
| total_shipping | total_tax | shipping_plus_tax |
|---|---|---|
| 89.85 | 91.70 | 181.55 |
Part 4: SUM with GROUP BY
This is where SUM becomes a powerful analytical tool – totaling values within groups.
1. Sum by Category
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="token comment">-- Total revenue by product category</span> <span class="token keyword">SELECT</span> p<span class="token punctuation">.</span>category<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> category_revenue <span class="token keyword">FROM</span> order_items oi <span class="token keyword">JOIN</span> products p <span class="token keyword">ON</span> oi<span class="token punctuation">.</span>product_id <span class="token operator">=</span> p<span class="token punctuation">.</span>product_id <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> p<span class="token punctuation">.</span>category <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> category_revenue <span class="token keyword">DESC</span><span class="token punctuation">;</span> |
Result:
| category | category_revenue |
|---|---|
| Furniture | 1879.87 |
| Electronics | 1855.63 |
| Appliances | 1212.02 |
2. Sum with Multiple Grouping Columns
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="token comment">-- Revenue by category and order status</span> <span class="token keyword">SELECT</span> p<span class="token punctuation">.</span>category<span class="token punctuation">,</span> o<span class="token punctuation">.</span><span class="token keyword">status</span><span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> revenue <span class="token keyword">FROM</span> order_items oi <span class="token keyword">JOIN</span> orders o <span class="token keyword">ON</span> oi<span class="token punctuation">.</span>order_id <span class="token operator">=</span> o<span class="token punctuation">.</span>order_id <span class="token keyword">JOIN</span> products p <span class="token keyword">ON</span> oi<span class="token punctuation">.</span>product_id <span class="token operator">=</span> p<span class="token punctuation">.</span>product_id <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> p<span class="token punctuation">.</span>category<span class="token punctuation">,</span> o<span class="token punctuation">.</span><span class="token keyword">status</span> <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> p<span class="token punctuation">.</span>category<span class="token punctuation">,</span> o<span class="token punctuation">.</span><span class="token keyword">status</span><span class="token punctuation">;</span> |
Result (partial):
| category | status | revenue |
|---|---|---|
| Appliances | delivered | 759.91 |
| Appliances | processing | 149.99 |
| Appliances | shipped | 302.12 |
| Electronics | delivered | 1125.74 |
| Electronics | pending | 119.97 |
| Electronics | processing | 269.97 |
| Electronics | shipped | 339.95 |
3. Sum with ROLLUP for Subtotals
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="token comment">-- Get revenue with subtotals by category and overall total</span> <span class="token keyword">SELECT</span> <span class="token keyword">COALESCE</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span>category<span class="token punctuation">,</span> <span class="token string">'All Categories'</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> category<span class="token punctuation">,</span> <span class="token keyword">COALESCE</span><span class="token punctuation">(</span>o<span class="token punctuation">.</span><span class="token keyword">status</span><span class="token punctuation">,</span> <span class="token string">'All Statuses'</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> <span class="token keyword">status</span><span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> revenue <span class="token keyword">FROM</span> order_items oi <span class="token keyword">JOIN</span> orders o <span class="token keyword">ON</span> oi<span class="token punctuation">.</span>order_id <span class="token operator">=</span> o<span class="token punctuation">.</span>order_id <span class="token keyword">JOIN</span> products p <span class="token keyword">ON</span> oi<span class="token punctuation">.</span>product_id <span class="token operator">=</span> p<span class="token punctuation">.</span>product_id <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> ROLLUP<span class="token punctuation">(</span>p<span class="token punctuation">.</span>category<span class="token punctuation">,</span> o<span class="token punctuation">.</span><span class="token keyword">status</span><span class="token punctuation">)</span> <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> p<span class="token punctuation">.</span>category<span class="token punctuation">,</span> o<span class="token punctuation">.</span><span class="token keyword">status</span><span class="token punctuation">;</span> |
Part 5: SUM with HAVING
Filter groups based on their total:
1. Find High-Performing Categories
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="token comment">-- Categories with total revenue over $1000</span> <span class="token keyword">SELECT</span> p<span class="token punctuation">.</span>category<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> total_revenue <span class="token keyword">FROM</span> order_items oi <span class="token keyword">JOIN</span> products p <span class="token keyword">ON</span> oi<span class="token punctuation">.</span>product_id <span class="token operator">=</span> p<span class="token punctuation">.</span>product_id <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> p<span class="token punctuation">.</span>category <span class="token keyword">HAVING</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">1000</span> <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> total_revenue <span class="token keyword">DESC</span><span class="token punctuation">;</span> |
2. Find Top Customers
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class="token comment">-- Customers who have spent more than $500</span> <span class="token keyword">SELECT</span> c<span class="token punctuation">.</span>first_name<span class="token punctuation">,</span> c<span class="token punctuation">.</span>last_name<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> total_spent <span class="token keyword">FROM</span> customers c <span class="token keyword">JOIN</span> orders o <span class="token keyword">ON</span> c<span class="token punctuation">.</span>customer_id <span class="token operator">=</span> o<span class="token punctuation">.</span>customer_id <span class="token keyword">JOIN</span> order_items oi <span class="token keyword">ON</span> o<span class="token punctuation">.</span>order_id <span class="token operator">=</span> oi<span class="token punctuation">.</span>order_id <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> c<span class="token punctuation">.</span>customer_id<span class="token punctuation">,</span> c<span class="token punctuation">.</span>first_name<span class="token punctuation">,</span> c<span class="token punctuation">.</span>last_name <span class="token keyword">HAVING</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">500</span> <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> total_spent <span class="token keyword">DESC</span><span class="token punctuation">;</span> |
Result:
| first_name | last_name | total_spent |
|---|---|---|
| Alice | Johnson | 992.43 |
| Henry | Ford | 944.91 |
| Bob | Smith | 742.92 |
Part 6: SUM with DISTINCT
Use SUM(DISTINCT column) to sum only unique values:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="token comment">-- Compare regular SUM vs SUM DISTINCT</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>quantity<span class="token punctuation">)</span> <span class="token keyword">AS</span> total_items_sold<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span><span class="token keyword">DISTINCT</span> quantity<span class="token punctuation">)</span> <span class="token keyword">AS</span> sum_of_unique_quantities<span class="token punctuation">,</span> <span class="token function">COUNT</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> total_transactions<span class="token punctuation">,</span> <span class="token function">COUNT</span><span class="token punctuation">(</span><span class="token keyword">DISTINCT</span> quantity<span class="token punctuation">)</span> <span class="token keyword">AS</span> unique_quantities <span class="token keyword">FROM</span> order_items<span class="token punctuation">;</span> |
Result:
| total_items_sold | sum_of_unique_quantities | total_transactions | unique_quantities |
|---|---|---|---|
| 38 | 6 | 30 | 3 |
This shows that quantities 1, 2, and 3 appear, and their sum (1+2+3=6) is much less than the total items sold (38) because multiple transactions use the same quantities.
Part 7: SUM with Window Functions
Window functions let you calculate running totals and other cumulative sums.
1. Running Total of Sales
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class="token comment">-- Calculate running total of revenue by order date</span> <span class="token keyword">SELECT</span> o<span class="token punctuation">.</span>order_date<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> daily_revenue<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span><span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">OVER</span> <span class="token punctuation">(</span> <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> o<span class="token punctuation">.</span>order_date <span class="token punctuation">)</span> <span class="token keyword">AS</span> running_total_revenue <span class="token keyword">FROM</span> orders o <span class="token keyword">JOIN</span> order_items oi <span class="token keyword">ON</span> o<span class="token punctuation">.</span>order_id <span class="token operator">=</span> oi<span class="token punctuation">.</span>order_id <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> o<span class="token punctuation">.</span>order_date <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> o<span class="token punctuation">.</span>order_date<span class="token punctuation">;</span> |
Result:
| order_date | daily_revenue | running_total_revenue |
|---|---|---|
| 2024-01-15 | 340.96 | 340.96 |
| 2024-01-17 | 119.97 | 460.93 |
| 2024-01-18 | 134.47 | 595.40 |
| 2024-01-20 | 249.99 | 845.39 |
| … | … | … |
2. Percentage of Total
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class="token comment">-- Each product's revenue as percentage of total</span> <span class="token keyword">SELECT</span> p<span class="token punctuation">.</span>name<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> product_revenue<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span><span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">OVER</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> total_revenue<span class="token punctuation">,</span> <span class="token function">ROUND</span><span class="token punctuation">(</span><span class="token number">100.0</span> <span class="token operator">*</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token function">SUM</span><span class="token punctuation">(</span><span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">OVER</span> <span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> revenue_percent <span class="token keyword">FROM</span> order_items oi <span class="token keyword">JOIN</span> products p <span class="token keyword">ON</span> oi<span class="token punctuation">.</span>product_id <span class="token operator">=</span> p<span class="token punctuation">.</span>product_id <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> p<span class="token punctuation">.</span>product_id<span class="token punctuation">,</span> p<span class="token punctuation">.</span>name <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> revenue_percent <span class="token keyword">DESC</span><span class="token punctuation">;</span> |
3. Moving Average
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<span class="token comment">-- 3-day moving average of revenue</span> <span class="token keyword">WITH</span> daily_revenue <span class="token keyword">AS</span> <span class="token punctuation">(</span> <span class="token keyword">SELECT</span> o<span class="token punctuation">.</span>order_date<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> revenue <span class="token keyword">FROM</span> orders o <span class="token keyword">JOIN</span> order_items oi <span class="token keyword">ON</span> o<span class="token punctuation">.</span>order_id <span class="token operator">=</span> oi<span class="token punctuation">.</span>order_id <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> o<span class="token punctuation">.</span>order_date <span class="token punctuation">)</span> <span class="token keyword">SELECT</span> order_date<span class="token punctuation">,</span> revenue<span class="token punctuation">,</span> <span class="token function">AVG</span><span class="token punctuation">(</span>revenue<span class="token punctuation">)</span> <span class="token keyword">OVER</span> <span class="token punctuation">(</span><span class="token keyword">ORDER</span> <span class="token keyword">BY</span> order_date <span class="token keyword">ROWS</span> <span class="token operator">BETWEEN</span> <span class="token number">2</span> <span class="token keyword">PRECEDING</span> <span class="token operator">AND</span> <span class="token keyword">CURRENT</span> <span class="token keyword">ROW</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> moving_avg_3day <span class="token keyword">FROM</span> daily_revenue <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> order_date<span class="token punctuation">;</span> |
Part 8: SUM with CASE for Conditional Totals
1. Sum with Multiple Conditions
|
0 1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="token comment">-- Breakdown of revenue by payment method</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span><span class="token keyword">CASE</span> <span class="token keyword">WHEN</span> p<span class="token punctuation">.</span>payment_method <span class="token operator">=</span> <span class="token string">'credit_card'</span> <span class="token keyword">THEN</span> p<span class="token punctuation">.</span>amount <span class="token keyword">ELSE</span> <span class="token number">0</span> <span class="token keyword">END</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> credit_card_total<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span><span class="token keyword">CASE</span> <span class="token keyword">WHEN</span> p<span class="token punctuation">.</span>payment_method <span class="token operator">=</span> <span class="token string">'paypal'</span> <span class="token keyword">THEN</span> p<span class="token punctuation">.</span>amount <span class="token keyword">ELSE</span> <span class="token number">0</span> <span class="token keyword">END</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> paypal_total<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span><span class="token keyword">CASE</span> <span class="token keyword">WHEN</span> p<span class="token punctuation">.</span>payment_method <span class="token operator">=</span> <span class="token string">'debit_card'</span> <span class="token keyword">THEN</span> p<span class="token punctuation">.</span>amount <span class="token keyword">ELSE</span> <span class="token number">0</span> <span class="token keyword">END</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> debit_card_total<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span>amount<span class="token punctuation">)</span> <span class="token keyword">AS</span> grand_total <span class="token keyword">FROM</span> payments p<span class="token punctuation">;</span> |
Result:
| credit_card_total | paypal_total | debit_card_total | grand_total |
|---|---|---|---|
| 1799.91 | 599.91 | 567.95 | 2967.77 |
2. Sum with FILTER (PostgreSQL-specific)
|
0 1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="token comment">-- Cleaner syntax with FILTER clause</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>amount<span class="token punctuation">)</span> FILTER <span class="token punctuation">(</span><span class="token keyword">WHERE</span> payment_method <span class="token operator">=</span> <span class="token string">'credit_card'</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> credit_card_total<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>amount<span class="token punctuation">)</span> FILTER <span class="token punctuation">(</span><span class="token keyword">WHERE</span> payment_method <span class="token operator">=</span> <span class="token string">'paypal'</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> paypal_total<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>amount<span class="token punctuation">)</span> FILTER <span class="token punctuation">(</span><span class="token keyword">WHERE</span> payment_method <span class="token operator">=</span> <span class="token string">'debit_card'</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> debit_card_total<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>amount<span class="token punctuation">)</span> <span class="token keyword">AS</span> grand_total <span class="token keyword">FROM</span> payments<span class="token punctuation">;</span> |
3. Complex Conditional Sums
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span class="token comment">-- Calculate revenue by price tier</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span><span class="token keyword">CASE</span> <span class="token keyword">WHEN</span> p<span class="token punctuation">.</span>price <span class="token operator"><</span> <span class="token number">50</span> <span class="token keyword">THEN</span> oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span> <span class="token keyword">ELSE</span> <span class="token number">0</span> <span class="token keyword">END</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> budget_revenue<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span><span class="token keyword">CASE</span> <span class="token keyword">WHEN</span> p<span class="token punctuation">.</span>price <span class="token operator">BETWEEN</span> <span class="token number">50</span> <span class="token operator">AND</span> <span class="token number">200</span> <span class="token keyword">THEN</span> oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span> <span class="token keyword">ELSE</span> <span class="token number">0</span> <span class="token keyword">END</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> mid_range_revenue<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span><span class="token keyword">CASE</span> <span class="token keyword">WHEN</span> p<span class="token punctuation">.</span>price <span class="token operator">></span> <span class="token number">200</span> <span class="token keyword">THEN</span> oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span> <span class="token keyword">ELSE</span> <span class="token number">0</span> <span class="token keyword">END</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> premium_revenue <span class="token keyword">FROM</span> order_items oi <span class="token keyword">JOIN</span> products p <span class="token keyword">ON</span> oi<span class="token punctuation">.</span>product_id <span class="token operator">=</span> p<span class="token punctuation">.</span>product_id<span class="token punctuation">;</span> |
Part 9: Real-World Business Examples
Example 1: Executive Financial Summary
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<span class="token keyword">WITH</span> financial_metrics <span class="token keyword">AS</span> <span class="token punctuation">(</span> <span class="token keyword">SELECT</span> <span class="token comment">-- Revenue metrics</span> <span class="token punctuation">(</span><span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">FROM</span> order_items oi<span class="token punctuation">)</span> <span class="token keyword">AS</span> gross_revenue<span class="token punctuation">,</span> <span class="token comment">-- Cost metrics</span> <span class="token punctuation">(</span><span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> p<span class="token punctuation">.</span>cost<span class="token punctuation">)</span> <span class="token keyword">FROM</span> order_items oi <span class="token keyword">JOIN</span> products p <span class="token keyword">ON</span> oi<span class="token punctuation">.</span>product_id <span class="token operator">=</span> p<span class="token punctuation">.</span>product_id<span class="token punctuation">)</span> <span class="token keyword">AS</span> total_cogs<span class="token punctuation">,</span> <span class="token comment">-- Payment metrics</span> <span class="token punctuation">(</span><span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>amount<span class="token punctuation">)</span> <span class="token keyword">FROM</span> payments<span class="token punctuation">)</span> <span class="token keyword">AS</span> payments_received<span class="token punctuation">,</span> <span class="token comment">-- Shipping and tax</span> <span class="token punctuation">(</span><span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>shipping_cost<span class="token punctuation">)</span> <span class="token keyword">FROM</span> orders<span class="token punctuation">)</span> <span class="token keyword">AS</span> total_shipping<span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>tax_amount<span class="token punctuation">)</span> <span class="token keyword">FROM</span> orders<span class="token punctuation">)</span> <span class="token keyword">AS</span> total_tax<span class="token punctuation">,</span> <span class="token comment">-- Inventory value</span> <span class="token punctuation">(</span><span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>price <span class="token operator">*</span> stock_quantity<span class="token punctuation">)</span> <span class="token keyword">FROM</span> products<span class="token punctuation">)</span> <span class="token keyword">AS</span> inventory_value <span class="token punctuation">)</span> <span class="token keyword">SELECT</span> gross_revenue<span class="token punctuation">,</span> total_cogs<span class="token punctuation">,</span> gross_revenue <span class="token operator">-</span> total_cogs <span class="token keyword">AS</span> gross_profit<span class="token punctuation">,</span> <span class="token function">ROUND</span><span class="token punctuation">(</span><span class="token number">100.0</span> <span class="token operator">*</span> <span class="token punctuation">(</span>gross_revenue <span class="token operator">-</span> total_cogs<span class="token punctuation">)</span> <span class="token operator">/</span> gross_revenue<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> gross_margin_percent<span class="token punctuation">,</span> payments_received<span class="token punctuation">,</span> payments_received <span class="token operator">-</span> gross_revenue <span class="token keyword">AS</span> uncollected_revenue<span class="token punctuation">,</span> total_shipping<span class="token punctuation">,</span> total_tax<span class="token punctuation">,</span> inventory_value <span class="token keyword">FROM</span> financial_metrics<span class="token punctuation">;</span> |
Example 2: Monthly Sales Dashboard
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<span class="token keyword">WITH</span> monthly_sales <span class="token keyword">AS</span> <span class="token punctuation">(</span> <span class="token keyword">SELECT</span> DATE_TRUNC<span class="token punctuation">(</span><span class="token string">'month'</span><span class="token punctuation">,</span> o<span class="token punctuation">.</span>order_date<span class="token punctuation">)</span> <span class="token keyword">AS</span> <span class="token keyword">month</span><span class="token punctuation">,</span> <span class="token function">COUNT</span><span class="token punctuation">(</span><span class="token keyword">DISTINCT</span> o<span class="token punctuation">.</span>order_id<span class="token punctuation">)</span> <span class="token keyword">AS</span> order_count<span class="token punctuation">,</span> <span class="token function">COUNT</span><span class="token punctuation">(</span><span class="token keyword">DISTINCT</span> o<span class="token punctuation">.</span>customer_id<span class="token punctuation">)</span> <span class="token keyword">AS</span> unique_customers<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> revenue<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> p<span class="token punctuation">.</span>cost<span class="token punctuation">)</span> <span class="token keyword">AS</span> cost<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>o<span class="token punctuation">.</span>shipping_cost<span class="token punctuation">)</span> <span class="token keyword">AS</span> shipping_revenue<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>o<span class="token punctuation">.</span>tax_amount<span class="token punctuation">)</span> <span class="token keyword">AS</span> tax_collected <span class="token keyword">FROM</span> orders o <span class="token keyword">JOIN</span> order_items oi <span class="token keyword">ON</span> o<span class="token punctuation">.</span>order_id <span class="token operator">=</span> oi<span class="token punctuation">.</span>order_id <span class="token keyword">JOIN</span> products p <span class="token keyword">ON</span> oi<span class="token punctuation">.</span>product_id <span class="token operator">=</span> p<span class="token punctuation">.</span>product_id <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> DATE_TRUNC<span class="token punctuation">(</span><span class="token string">'month'</span><span class="token punctuation">,</span> o<span class="token punctuation">.</span>order_date<span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token keyword">SELECT</span> TO_CHAR<span class="token punctuation">(</span><span class="token keyword">month</span><span class="token punctuation">,</span> <span class="token string">'YYYY-Mon'</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> <span class="token keyword">month</span><span class="token punctuation">,</span> order_count<span class="token punctuation">,</span> unique_customers<span class="token punctuation">,</span> <span class="token function">ROUND</span><span class="token punctuation">(</span>revenue::<span class="token keyword">numeric</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> revenue<span class="token punctuation">,</span> <span class="token function">ROUND</span><span class="token punctuation">(</span>cost::<span class="token keyword">numeric</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> cost<span class="token punctuation">,</span> <span class="token function">ROUND</span><span class="token punctuation">(</span><span class="token punctuation">(</span>revenue <span class="token operator">-</span> cost<span class="token punctuation">)</span>::<span class="token keyword">numeric</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> profit<span class="token punctuation">,</span> <span class="token function">ROUND</span><span class="token punctuation">(</span><span class="token number">100.0</span> <span class="token operator">*</span> <span class="token punctuation">(</span>revenue <span class="token operator">-</span> cost<span class="token punctuation">)</span> <span class="token operator">/</span> revenue<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> margin_percent<span class="token punctuation">,</span> <span class="token function">ROUND</span><span class="token punctuation">(</span>revenue <span class="token operator">/</span> order_count<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> avg_order_value <span class="token keyword">FROM</span> monthly_sales <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> <span class="token keyword">month</span><span class="token punctuation">;</span> |
Example 3: Inventory Valuation and Turnover
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<span class="token keyword">SELECT</span> p<span class="token punctuation">.</span>category<span class="token punctuation">,</span> <span class="token function">COUNT</span><span class="token punctuation">(</span><span class="token keyword">DISTINCT</span> p<span class="token punctuation">.</span>product_id<span class="token punctuation">)</span> <span class="token keyword">AS</span> products<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span>stock_quantity<span class="token punctuation">)</span> <span class="token keyword">AS</span> total_units<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span>price <span class="token operator">*</span> p<span class="token punctuation">.</span>stock_quantity<span class="token punctuation">)</span> <span class="token keyword">AS</span> inventory_value_at_retail<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span>cost <span class="token operator">*</span> p<span class="token punctuation">.</span>stock_quantity<span class="token punctuation">)</span> <span class="token keyword">AS</span> inventory_value_at_cost<span class="token punctuation">,</span> <span class="token keyword">COALESCE</span><span class="token punctuation">(</span><span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> units_sold<span class="token punctuation">,</span> <span class="token keyword">COALESCE</span><span class="token punctuation">(</span><span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> sales_revenue<span class="token punctuation">,</span> <span class="token keyword">CASE</span> <span class="token keyword">WHEN</span> <span class="token function">SUM</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span>stock_quantity<span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0</span> <span class="token keyword">THEN</span> <span class="token function">ROUND</span><span class="token punctuation">(</span><span class="token keyword">COALESCE</span><span class="token punctuation">(</span><span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span>::<span class="token keyword">numeric</span> <span class="token operator">/</span> <span class="token function">SUM</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span>stock_quantity<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">ELSE</span> <span class="token number">0</span> <span class="token keyword">END</span> <span class="token keyword">AS</span> turnover_rate_percent <span class="token keyword">FROM</span> products p <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> order_items oi <span class="token keyword">ON</span> p<span class="token punctuation">.</span>product_id <span class="token operator">=</span> oi<span class="token punctuation">.</span>product_id <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> p<span class="token punctuation">.</span>category <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> turnover_rate_percent <span class="token keyword">DESC</span><span class="token punctuation">;</span> |
Example 4: Customer Lifetime Value Analysis
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<span class="token keyword">SELECT</span> c<span class="token punctuation">.</span>customer_id<span class="token punctuation">,</span> c<span class="token punctuation">.</span>first_name<span class="token punctuation">,</span> c<span class="token punctuation">.</span>last_name<span class="token punctuation">,</span> c<span class="token punctuation">.</span>city<span class="token punctuation">,</span> <span class="token function">COUNT</span><span class="token punctuation">(</span><span class="token keyword">DISTINCT</span> o<span class="token punctuation">.</span>order_id<span class="token punctuation">)</span> <span class="token keyword">AS</span> order_count<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> lifetime_value<span class="token punctuation">,</span> <span class="token function">AVG</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> avg_order_value<span class="token punctuation">,</span> <span class="token function">MAX</span><span class="token punctuation">(</span>o<span class="token punctuation">.</span>order_date<span class="token punctuation">)</span> <span class="token keyword">AS</span> last_order_date<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span>amount<span class="token punctuation">)</span> <span class="token keyword">AS</span> total_paid<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token keyword">COALESCE</span><span class="token punctuation">(</span><span class="token function">SUM</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span>amount<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> outstanding_balance <span class="token keyword">FROM</span> customers c <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> orders o <span class="token keyword">ON</span> c<span class="token punctuation">.</span>customer_id <span class="token operator">=</span> o<span class="token punctuation">.</span>customer_id <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> order_items oi <span class="token keyword">ON</span> o<span class="token punctuation">.</span>order_id <span class="token operator">=</span> oi<span class="token punctuation">.</span>order_id <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> payments p <span class="token keyword">ON</span> o<span class="token punctuation">.</span>order_id <span class="token operator">=</span> p<span class="token punctuation">.</span>order_id <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> c<span class="token punctuation">.</span>customer_id<span class="token punctuation">,</span> c<span class="token punctuation">.</span>first_name<span class="token punctuation">,</span> c<span class="token punctuation">.</span>last_name<span class="token punctuation">,</span> c<span class="token punctuation">.</span>city <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> lifetime_value <span class="token keyword">DESC</span><span class="token punctuation">;</span> |
Example 5: Profitability by Product
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<span class="token keyword">SELECT</span> p<span class="token punctuation">.</span>name<span class="token punctuation">,</span> p<span class="token punctuation">.</span>category<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity<span class="token punctuation">)</span> <span class="token keyword">AS</span> units_sold<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> revenue<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> p<span class="token punctuation">.</span>cost<span class="token punctuation">)</span> <span class="token keyword">AS</span> total_cost<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> p<span class="token punctuation">.</span>cost<span class="token punctuation">)</span> <span class="token keyword">AS</span> profit<span class="token punctuation">,</span> <span class="token function">ROUND</span><span class="token punctuation">(</span><span class="token number">100.0</span> <span class="token operator">*</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> p<span class="token punctuation">.</span>cost<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token keyword">NULLIF</span><span class="token punctuation">(</span><span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> profit_margin_percent<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> oi<span class="token punctuation">.</span>discount<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token keyword">NULLIF</span><span class="token punctuation">(</span><span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> avg_selling_price <span class="token keyword">FROM</span> products p <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> order_items oi <span class="token keyword">ON</span> p<span class="token punctuation">.</span>product_id <span class="token operator">=</span> oi<span class="token punctuation">.</span>product_id <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> p<span class="token punctuation">.</span>product_id<span class="token punctuation">,</span> p<span class="token punctuation">.</span>name<span class="token punctuation">,</span> p<span class="token punctuation">.</span>category <span class="token keyword">HAVING</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity<span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0</span> <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> profit <span class="token keyword">DESC</span><span class="token punctuation">;</span> |
Part 10: Performance Considerations
1. Indexes for SUM
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="token comment">-- Indexes on columns used in SUM and WHERE clauses</span> <span class="token keyword">CREATE</span> <span class="token keyword">INDEX</span> idx_order_items_product <span class="token keyword">ON</span> order_items<span class="token punctuation">(</span>product_id<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">CREATE</span> <span class="token keyword">INDEX</span> idx_order_items_order <span class="token keyword">ON</span> order_items<span class="token punctuation">(</span>order_id<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">CREATE</span> <span class="token keyword">INDEX</span> idx_orders_customer <span class="token keyword">ON</span> orders<span class="token punctuation">(</span>customer_id<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">CREATE</span> <span class="token keyword">INDEX</span> idx_orders_status <span class="token keyword">ON</span> orders<span class="token punctuation">(</span><span class="token keyword">status</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">CREATE</span> <span class="token keyword">INDEX</span> idx_orders_order_date <span class="token keyword">ON</span> orders<span class="token punctuation">(</span>order_date<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">-- Composite indexes for common grouping patterns</span> <span class="token keyword">CREATE</span> <span class="token keyword">INDEX</span> idx_products_category <span class="token keyword">ON</span> products<span class="token punctuation">(</span>category<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">CREATE</span> <span class="token keyword">INDEX</span> idx_order_items_calculation <span class="token keyword">ON</span> order_items<span class="token punctuation">(</span>product_id<span class="token punctuation">,</span> quantity<span class="token punctuation">,</span> unit_price<span class="token punctuation">,</span> discount<span class="token punctuation">)</span><span class="token punctuation">;</span> |
2. Understanding SUM Performance
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="token comment">-- Fast - uses indexes</span> <span class="token keyword">EXPLAIN</span> <span class="token keyword">ANALYZE</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>quantity<span class="token punctuation">)</span> <span class="token keyword">FROM</span> order_items <span class="token keyword">WHERE</span> product_id <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">-- Also fast with proper indexes</span> <span class="token keyword">EXPLAIN</span> <span class="token keyword">ANALYZE</span> <span class="token keyword">SELECT</span> category<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>price <span class="token operator">*</span> stock_quantity<span class="token punctuation">)</span> <span class="token keyword">FROM</span> products <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> category<span class="token punctuation">;</span> |
3. Dealing with Large Sums
For very large tables, consider:
-
Materialized views for frequently-used sums
-
Summary tables updated via triggers
-
Approximate techniques when exact precision isn’t needed
Part 11: Common Mistakes and How to Avoid Them
Mistake 1: Not Handling NULLs in Expressions
|
0 1 2 3 4 5 6 7 8 9 10 |
<span class="token comment">-- ❌ If any value is NULL, the whole sum becomes NULL</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>quantity <span class="token operator">*</span> discount<span class="token punctuation">)</span> <span class="token keyword">FROM</span> order_items<span class="token punctuation">;</span> <span class="token comment">-- discount might be NULL</span> <span class="token comment">-- ✅ Use COALESCE to provide defaults</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>quantity <span class="token operator">*</span> <span class="token keyword">COALESCE</span><span class="token punctuation">(</span>discount<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">FROM</span> order_items<span class="token punctuation">;</span> |
Mistake 2: Forgetting to Join Correctly
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="token comment">-- ❌ This double-counts if an order has multiple items</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>o<span class="token punctuation">.</span>total_amount<span class="token punctuation">)</span> <span class="token keyword">FROM</span> orders o <span class="token keyword">JOIN</span> order_items oi <span class="token keyword">ON</span> o<span class="token punctuation">.</span>order_id <span class="token operator">=</span> oi<span class="token punctuation">.</span>order_id<span class="token punctuation">;</span> <span class="token comment">-- ✅ Sum only once per order</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>total_amount<span class="token punctuation">)</span> <span class="token keyword">FROM</span> orders<span class="token punctuation">;</span> <span class="token comment">-- Or if you need item-level sums:</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>oi<span class="token punctuation">.</span>quantity <span class="token operator">*</span> oi<span class="token punctuation">.</span>unit_price<span class="token punctuation">)</span> <span class="token keyword">FROM</span> order_items oi<span class="token punctuation">;</span> |
Mistake 3: Integer Division in Averages
|
0 1 2 3 4 5 6 7 8 9 10 |
<span class="token comment">-- ❌ This does integer division if both are integers</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>quantity<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token function">COUNT</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token keyword">FROM</span> order_items<span class="token punctuation">;</span> <span class="token comment">-- ✅ Convert to numeric for decimal division</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>quantity<span class="token punctuation">)</span>::<span class="token keyword">numeric</span> <span class="token operator">/</span> <span class="token function">COUNT</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token keyword">FROM</span> order_items<span class="token punctuation">;</span> |
Mistake 4: Not Using HAVING for Group Filters
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class="token comment">-- ❌ This doesn't work</span> <span class="token keyword">SELECT</span> category<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>price <span class="token operator">*</span> stock_quantity<span class="token punctuation">)</span> <span class="token keyword">FROM</span> products <span class="token keyword">WHERE</span> <span class="token function">SUM</span><span class="token punctuation">(</span>price <span class="token operator">*</span> stock_quantity<span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">10000</span> <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> category<span class="token punctuation">;</span> <span class="token comment">-- ✅ Use HAVING instead</span> <span class="token keyword">SELECT</span> category<span class="token punctuation">,</span> <span class="token function">SUM</span><span class="token punctuation">(</span>price <span class="token operator">*</span> stock_quantity<span class="token punctuation">)</span> <span class="token keyword">FROM</span> products <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> category <span class="token keyword">HAVING</span> <span class="token function">SUM</span><span class="token punctuation">(</span>price <span class="token operator">*</span> stock_quantity<span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">10000</span><span class="token punctuation">;</span> |
Mistake 5: Overflow with Large Sums
|
0 1 2 3 4 5 6 7 8 |
<span class="token comment">-- For very large sums, consider data type</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>big_numbers::<span class="token keyword">numeric</span><span class="token punctuation">)</span> <span class="token keyword">FROM</span> huge_table<span class="token punctuation">;</span> <span class="token comment">-- Use numeric for precision</span> <span class="token keyword">SELECT</span> <span class="token function">SUM</span><span class="token punctuation">(</span>big_numbers::<span class="token keyword">bigint</span><span class="token punctuation">)</span> <span class="token keyword">FROM</span> huge_table<span class="token punctuation">;</span> <span class="token comment">-- Use bigint for large integers</span> |
Summary: The SUM Philosophy
The SUM function is your fundamental tool for totaling numeric data. Master these patterns:
-
Basic totals – SUM(column) for simple additions
-
Grouped totals – SUM with GROUP BY for category analysis
-
Conditional totals – SUM with CASE or FILTER
-
Cumulative totals – SUM with window functions
-
Weighted totals – SUM(quantity * price) for complex calculations
Remember:
-
SUM ignores NULL values
-
Use SUM(DISTINCT) cautiously – it’s rarely what you want
-
Window functions provide running totals without grouping
-
Indexes on columns in WHERE and GROUP BY speed up SUM queries
-
Consider data types for large sums to avoid overflow
Key applications:
-
Financial reporting (“What’s our total revenue?”)
-
Inventory management (“What’s the total value of stock?”)
-
Customer analytics (“How much has each customer spent?”)
-
Performance metrics (“What are the total sales by region?”)
-
Profitability analysis (“What’s the total profit by product?”)
The SUM function transforms detailed transaction data into high-level business intelligence. It answers the question “What’s the total?” in countless variations, making it essential for anyone working with numerical data.
Would you like me to elaborate on any specific aspect of SUM, such as more complex business scenarios, performance optimization for large datasets, or integration with other aggregate functions?
