Skip to content
Mindset & Code edited this page Aug 18, 2026 · 4 revisions

Sales Optimization SQL — Wiki

🇬🇧 English first · 🇪🇸 Español más abajo.

Sales performance and profitability analysis in plain SQL over 10.000 synthetic transactions — five queries that answer the questions a SalesOps team actually asks, written to run unchanged on SQLite.

Repo: mindset-code/project-sales-optimization-sql


Pages in this wiki

  • Queries SQL — the five queries, one by one, with what each returns
  • Dataset y resultados — the columns, how they are generated, and the real aggregates

Workflow

flowchart LR
    A["generate_data.py"] -->|10.000 rows| B["sales_data.csv"]
    B -->|import as table sales_data| C["SQLite"]
    C -->|sales_analysis.sql| D["5 result sets"]
    D --> E["Power BI · Tableau"]
Loading

The whole project is two files: a 35-line generator and a 63-line SQL script. There is no application, no ORM and no notebook — the point is the SQL.


Stack

Layer Technology
Queries SQL, written for SQLite (strftime is SQLite syntax)
Data generation Python · pandas · NumPy, np.random.seed(42)
BI target Power BI · Tableau
Domain SalesOps · RevOps · Business Intelligence

Portability

The queries are standard aggregation except for one function. sales_analysis.sql uses strftime('%Y-%m', SaleDate), which is SQLite. To run the monthly trend on another engine:

Engine Replacement
PostgreSQL TO_CHAR(SaleDate, 'YYYY-MM')
MySQL DATE_FORMAT(SaleDate, '%Y-%m')
SQL Server FORMAT(SaleDate, 'yyyy-MM')

Everything else — SUM, AVG, COUNT, GROUP BY, HAVING, LIMIT — runs as is, except that SQL Server writes LIMIT 5 as TOP 5.

Known issue in the generator

generate_data.py finishes with an absolute path from the machine it was written on:

df.to_csv('/home/ubuntu/project3_sales_sql/sales_data.csv', index=False)

Anyone cloning the repository will get a FileNotFoundError. The CSV is committed, so the queries can be run without regenerating anything, but the line should read df.to_csv('sales_data.csv', index=False).


🇪🇸 Español

Análisis de rendimiento y rentabilidad de ventas en SQL puro sobre 10.000 transacciones sintéticas — cinco consultas que responden a las preguntas que se hace de verdad un equipo de SalesOps, escritas para ejecutarse sin cambios en SQLite.

Repo: mindset-code/project-sales-optimization-sql


Páginas de esta wiki

  • Queries SQL — las cinco consultas, una a una, con lo que devuelve cada cual
  • Dataset y resultados — las columnas, cómo se generan y los agregados reales

Flujo de trabajo

Ver el diagrama de arriba. Todo el proyecto son dos ficheros: un generador de 35 líneas y un script SQL de 63. No hay aplicación, ni ORM, ni cuaderno — lo que importa aquí es el SQL.


Stack

Capa Tecnología
Consultas SQL, escrito para SQLite (strftime es sintaxis de SQLite)
Generación de datos Python · pandas · NumPy, np.random.seed(42)
Destino BI Power BI · Tableau
Dominio SalesOps · RevOps · Business Intelligence

Portabilidad

Las consultas son agregación estándar salvo por una función. sales_analysis.sql usa strftime('%Y-%m', SaleDate), que es de SQLite. Para ejecutar la tendencia mensual en otro motor:

Motor Sustituto
PostgreSQL TO_CHAR(SaleDate, 'YYYY-MM')
MySQL DATE_FORMAT(SaleDate, '%Y-%m')
SQL Server FORMAT(SaleDate, 'yyyy-MM')

Todo lo demás —SUM, AVG, COUNT, GROUP BY, HAVING, LIMIT— funciona tal cual, salvo que SQL Server escribe LIMIT 5 como TOP 5.

Fallo conocido en el generador

generate_data.py termina con una ruta absoluta de la máquina donde se escribió:

df.to_csv('/home/ubuntu/project3_sales_sql/sales_data.csv', index=False)

Quien clone el repositorio se encontrará un FileNotFoundError. El CSV está versionado, así que las consultas se pueden ejecutar sin regenerar nada, pero esa línea debería decir df.to_csv('sales_data.csv', index=False).

Clone this wiki locally