Sling Academy
Home/Python/Python sqlite3 aggregation: SUM, AVG, COUNT, MIN, and MAX

Python sqlite3 aggregation: SUM, AVG, COUNT, MIN, and MAX

Last updated: February 06, 2024

Overview

SQLite, being an incredibly light yet powerful database management system, is an integral part of many applications. Python, with its sqlite3 module, allows easy interaction with SQLite databases, making data manipulation and analytics more seamless than ever. In this article, we’ll delve into how to leverage the sqlite3 module in Python to perform aggregation functions such as SUM, AVG, COUNT, MIN, and MAX on your data.

Setting up the Environment

First off, make sure you have Python installed on your machine. The sqlite3 module comes with Python, so there’s no need for additional installations. We will create an example database and table for our demonstrations.

import sqlite3

# Connect to the database (It will be created if it doesn't exist)
conn = sqlite3.connect('example.db')
c = conn.cursor()

# Create a table

 c.execute('''CREATE TABLE IF NOT EXISTS expenses(id INTEGER PRIMARY KEY, name TEXT, amount DECIMAL)''')
conn.commit()

Inserting Data

Once your environment is set up and your table is ready, it’s time to insert some data to work with.

# Insert data into the table
examples = [('Rent', 1200.50), ('Groceries', 300.25), ('Utilities', 150.75)]
for example in examples:
    c.execute('INSERT INTO expenses (name, amount) VALUES (?, ?)', example)
conn.commit()

Basic Aggregations

Now that we have data in our table, let’s explore the basic aggregation functions provided by the SQL language that can be executed via the sqlite3 module in Python.

1. COUNT

Counting the number of rows in the table:

c.execute('SELECT COUNT(*) FROM expenses')
result = c.fetchone()
print('Total rows:', result[0])

2. SUM

Summing up the column values:

c.execute('SELECT SUM(amount) FROM expenses')
result = c.fetchone()
print('Total spent:', result[0])

3. AVG

Calculating the average value:

c.execute('SELECT AVG(amount) FROM expenses')
result = c.fetchone()
print('Average spending:', result[0])

4. MIN and MAX

Finding the minimum and maximum values:

c.execute('SELECT MIN(amount), MAX(amount) FROM expenses')
result = c.fetchone()
print('Least expensive item:', result[0], '\nMost expensive item:', result[1])

Group By and Having Clauses

To perform more sophisticated aggregations, we can categorize data using the GROUP BY and HAVING clauses.

Example: Monthly Expenses

Assuming each row now also has a ‘month’ column to distinguish expenses by month, we can aggregate data on a monthly basis.

# Assuming 'month' column addition
# Group by month and calculate the total and average spending per month

 c.execute('''SELECT month, SUM(amount), AVG(amount)
  FROM expenses
  GROUP BY month
  HAVING SUM(amount) > 500''')
results = c.fetchall()
for month, total, avg in results:
    print(f'Month: {month}, Total spent: {total}, Average spending: {avg}')

Advanced Techniques

For more advanced data manipulation and analytics, one might use SQL functions and elements in combination with Python logic. This could involve nested queries, window functions, or using Python for post-SQL processing of the query results.

Conclusion

SQLite’s aggregation functions, when used with Python’s sqlite3 module, offer powerful tools for data analysis and management. Whether calculating simple statistics like totals and averages, grouping data for more nuanced insights, or even integrating Python and SQL for advanced analysis, the flexibility and efficiency of this combination are unparalleled in managing small to medium-sized datasets.

Next Article: Python sqlite3: Selecting/Counting Distinct Rows

Previous Article: Python sqlite3: How to remove duplicates from a table

Series: Data Persistence in Python – Tutorials & Examples

Python

You May Also Like

  • Introduction to yfinance: Fetching Historical Stock Data in Python
  • Monitoring Volatility and Daily Averages Using cryptocompare
  • Advanced DOM Interactions: XPath and CSS Selectors in Playwright (Python)
  • Automating Strategy Updates and Version Control in freqtrade
  • Setting Up a freqtrade Dashboard for Real-Time Monitoring
  • Deploying freqtrade on a Cloud Server or Docker Environment
  • Optimizing Strategy Parameters with freqtrade’s Hyperopt
  • Risk Management: Setting Stop Loss, Trailing Stops, and ROI in freqtrade
  • Integrating freqtrade with TA-Lib and pandas-ta Indicators
  • Handling Multiple Pairs and Portfolios with freqtrade
  • Using freqtrade’s Backtesting and Hyperopt Modules
  • Developing Custom Trading Strategies for freqtrade
  • Debugging Common freqtrade Errors: Exchange Connectivity and More
  • Configuring freqtrade Bot Settings and Strategy Parameters
  • Installing freqtrade for Automated Crypto Trading in Python
  • Scaling cryptofeed for High-Frequency Trading Environments
  • Building a Real-Time Market Dashboard Using cryptofeed in Python
  • Customizing cryptofeed Callbacks for Advanced Market Insights
  • Integrating cryptofeed into Automated Trading Bots