PE / AN / 01
Analytics without programming
Four months of spreadsheets and Power BI dashboards.
Open the syllabusPeru · SQL and data analysis · Live online, in English
SQL is the language in which most organisations ask questions of their data, and the one analysts are expected to know before Python. This page explains what a course should teach, which of ours suits an analyst or a developer, and works through a real investigation of Chiclayo's open waste-collection data, where a simple monthly total hides a month that never happened twice.
Live classes since 2020 · 10,000+ learners worldwide · real tables from the first week
The short answer
At Modern Age Coders, SQL and data analysis for learners in Peru is taught live, online and in English. Adults and university students go from a first SELECT to joins, grouping, window functions and checks on data quality, then add spreadsheets, Python and dashboards; teenagers from 13 have their own SQL course. We practise on real open data, including Peruvian municipal registers, and teach people to question a total before reporting it. A mentor leads every class on video, in a class of fifteen to twenty or one to one, at the day and hour you choose.
Start here
One for analysts, one for people who build databases, and one for teenagers. Each starts from zero.

PE / SQL / 01
The analyst's route, over 8 to 10 months for anyone 18 or older starting from nothing: spreadsheets, SQL, Python and dashboards, always on real data.
Open the syllabus →
PE / SQL / 02
For beginners from 18, 7 to 8 months. Queries, then design and administration: the course for people who will build and run databases.
Open the syllabus →
PE / SQL / 03
Ages 13 to 18, 5 to 6 months, from a first query to the data behind real apps.
Open the syllabus →Why SQL
Because a spreadsheet shows you the data and SQL asks it questions. Once a table is too large to scroll, shared by several people or stored in a company system, SQL is how you reach it.
A query is a written question. Run it again next month on new data and you get the new answer, with no hand-copied formulas to drift out of step.
Sales systems, school registers, hospital stock, municipal records: most are databases. SQL reads them directly instead of waiting for someone to export a file.
A query that finds duplicates or contradictions is evidence another analyst can rerun. That is the heart of the lesson further down this page.
SELECT, WHERE and ORDER BY; aggregates with GROUP BY and HAVING; joins between tables; subqueries and common table expressions; window functions for running totals and rankings; and the design of tables, keys and indexes.
Alongside the syntax, a set of habits: count rows before and after every join, check that keys are unique, compare two columns that should agree, and never report a total that has not been checked another way.
Our analysis course pairs SQL with Python for cleaning and charts, and with a business intelligence tool for dashboards. The lesson below runs SQL from Python on purpose: it is how many analysts work, and it needs nothing but Python, which already includes SQLite.
Developers take the MySQL course instead, which goes deeper into database design, transactions and administration.
Peruvian open data
The Municipalidad Provincial de Chiclayo publishes the tonnes of solid waste collected in the district of Chiclayo, shift by shift and day by day, on Peru's Plataforma Nacional de Datos Abiertos. It is a small, honest-looking table, and an ideal first SQL dataset.
| Item | Description on datosabiertos.gob.pe |
|---|---|
| Publisher | Municipalidad Provincial de Chiclayo, through its Sub-Gerencia de Residuos Sólidos |
| Content | Weight of solid waste collected, in tonnes, by collection shift and day |
| Period | 2023 to April 2026 |
| Person who recorded the weight | Anonymised |
| Update frequency | Monthly |
| Released and modified | Released 8 March 2026; last modified 9 May 2026 |
| Licence | ODC-By, the Open Data Commons Attribution License |
Taken from the "Registro de recolección de residuos sólidos en el distrito de Chiclayo" page of the Municipalidad Provincial de Chiclayo on datosabiertos.gob.pe; page and file retrieved 9 November 2026. In the file we downloaded: 3,648 rows, three shifts, dates from 1 January 2023 to 30 April 2026; these counts are ours.
Chiclayo city counted 552,508 people at the 2017 census, which made it one of the largest cities in Peru; INEI has not yet published city figures from the 2025 census. The department of Lambayeque, of which Chiclayo is the capital, counted 1,404,633 people in the 2025 census.
The dataset covers only the district of Chiclayo, not the whole city or province, which is the kind of detail an analyst writes down before comparing it with anything else.
The file is in Latin-1, not UTF-8, so opening it the default way fails on the first accented letter. One column header, "PROVINCIA ", ends with a space. The weekday column spells Wednesday both MIERCOLES and MIÉRCOLES, and some unit values carry a trailing space.
None of that is unusual. It is simply what real registers look like, and every one of those details would break a careless query. Learners write them into a short data note before going further.
An SQL lesson
It did not. But the first query any analyst would write says it did, and says nothing at all about November. Here is how SQL finds out why, in four short queries.
import csv, sqlite3
FILE = "residuos_chiclayo_abril2026.csv"
db = sqlite3.connect(":memory:")
db.execute("CREATE TABLE r (fecha TEXT, mes TEXT, dia TEXT, turno TEXT, peso REAL)")
with open(FILE, encoding="latin-1") as f:
for row in csv.DictReader(f):
db.execute("INSERT INTO r VALUES (?, ?, ?, ?, ?)",
(row["FECHA_REGISTRO"], row["MES"], row["DIA"].strip(),
row["TURNO"], float(row["PESO"])))
def show(sql):
for row in db.execute(sql):
print(*row, sep=" | ")
print()This keeps five columns: the date of the record, the month column, the weekday name, the shift and the weight in tonnes. show() prints each result row with | between the values.
A manager asks for tonnes collected per month at the end of 2024. The natural query takes the month from the date, groups by it and adds up the weight.
Before reading the result, the mentor asks what each month should look like: about 90 or 93 shifts, three a day, and a total in the same range as its neighbours.
September has 90 shifts and December 93, as expected. October has 183 shifts and almost double the tonnes. November is not there at all.
Many reports would print this table. A good analyst sees two alarms: a month with twice the expected rows, and a month with none.
show("""
SELECT substr(fecha, 1, 6) AS month, COUNT(*) AS shifts, ROUND(SUM(peso), 1) AS tonnes
FROM r
WHERE fecha BETWEEN '20240901' AND '20241231'
GROUP BY month
""")It prints 202409 | 90 | 6368.6, 202410 | 183 | 13921.5 and 202412 | 93 | 6924.9. November 2024 is missing.
Every day should have exactly three rows, one per shift, so the date is a key that ought to be unique per shift. GROUP BY with HAVING finds the days that break the rule. Then two columns that must agree are compared: the file's own month column against the month inside the date, and the weekday name against the weekday SQLite computes from the date.
show("""
SELECT fecha, COUNT(*) AS rows_that_day
FROM r
GROUP BY fecha
HAVING COUNT(*) <> 3
ORDER BY rows_that_day DESC
LIMIT 3
""")
show("""
SELECT mes, substr(fecha, 1, 6) AS month_in_date, COUNT(*)
FROM r
WHERE mes <> substr(fecha, 1, 6)
GROUP BY mes, month_in_date
""")
show("""
SELECT fecha, dia,
strftime('%w', substr(fecha,1,4) || '-' || substr(fecha,5,2) || '-' || substr(fecha,7,2)) AS weekday_of_date
FROM r
WHERE mes = '202411'
LIMIT 1
""")
show("""
SELECT mes, COUNT(*) AS shifts, ROUND(SUM(peso), 1) AS tonnes
FROM r
WHERE mes BETWEEN '202409' AND '202412'
GROUP BY mes
""")It prints 20250630 | 90, 20241030 | 6 and 20241029 | 6; then 202411 | 202410 | 90; then 20241001 | VIERNES | 2; and finally 202409 | 90 | 6368.6, 202410 | 93 | 7342.9, 202411 | 90 | 6578.6 and 202412 | 93 | 6924.9.
| Month | Shifts, grouped by date | Tonnes, grouped by date | Tonnes, grouped by month column |
|---|---|---|---|
| September 2024 | 90 | 6,368.6 | 6,368.6 |
| October 2024 | 183 | 13,921.5 | 7,342.9 |
| November 2024 | 0 | none | 6,578.6 |
| December 2024 | 93 | 6,924.9 | 6,924.9 |
Credit: waste-collection register of the Municipalidad Provincial de Chiclayo, published on datosabiertos.gob.pe under ODC-By. We wrote and ran the queries, and computed the totals, on 9 November 2026 (Python 3, SQLite 3.50.4).
The story is now clear. The 90 rows whose month column says November 2024 carry October dates, 1 to 30 October. The weekday settles which column to trust: the first of those rows is dated 1 October 2024 but its weekday says VIERNES, Friday, while SQLite's strftime('%w') returns 2, a Tuesday. 1 November 2024 was a Friday. So the month column and the weekday are right, and the date was typed with the wrong month. Grouped by the month column, every month has 90 or 93 shifts and a believable total.
The first clash query found a second, stranger problem: 90 rows all dated 30 June 2025. Their weekday names run Sunday, Monday, Tuesday and so on in order, and 1 June 2025 was a Sunday, so the rows almost certainly cover the whole of June with one date pasted down the column. That one is left for the learner, below. Neither problem was visible in the dataset page, and neither needed anything more advanced than GROUP BY, HAVING and a comparison of two columns.
Choosing a course
Pick by what you will do with SQL most days. The table is our own advice.
| If you mostly want to | Take | Length |
|---|---|---|
| Analyse data and build reports | Data analysis: Excel, SQL, Python and BI | 8 to 10 months |
| Design and run databases for applications | MySQL: SQL and database design | 7 to 8 months |
| Start from spreadsheets, without programming | Data and AI analytics for non-programmers | 4 months |
| Go on to statistics and machine learning | Data science course, after SQL | 10 to 12 months |
| Learn SQL as a teenager | MySQL for teens, ages 13 to 18 | 5 to 6 months |
Course lengths are from our own syllabuses. Our advice, not a ranking; the mentor confirms the choice at the free class.
Many of our adult learners already prepare monthly reports by hand in spreadsheets. The analysis course moves the same work into SQL and Python so it runs again next month in seconds, with checks like the ones above built in.
Our Spanish page for adults learning to code in Peru describes how classes fit around a job.
University students in Peru meet SQL in database courses, often only as syntax. We add the analysis habits and the English vocabulary used in documentation and interviews.
If statistics and models are the goal, SQL comes first and data science second. Our Spanish page, data science en inglés, explains that next step.
Language of the classes
No. We teach only in English, live and online, with mentors based in India who adapt to each learner's level.
SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN: the language itself is made of English words, and so are the error messages and the documentation of every database. Learners who know a little English find that SQL reinforces it.
Mentors keep their sentences short, explain each new keyword in plain words and repeat when asked. You may answer however you can; the query on the screen is what matters.
Measured by EF's English Proficiency Index 2025, adults in Chiclayo average 474, which EF labels low; Lima averages 555, which it labels high.
If your English is closer to the first figure, the free class will tell you honestly whether to start now or to take a gentler course first. Many learners find that working with SQL in English is the practice that moves them up.
Class times
At the time you choose. Peru keeps one time zone across the country and does not change its clocks.
| Peru time | India time | Good for |
|---|---|---|
| 06:45 | 17:15 | Before the office |
| 12:00 | 22:30 | A lunch break |
| 19:30 | 06:00, next day | After work |
| 20:30 | 07:00, next day | Late learners |
The whole of Peru uses zone America/Lima, five hours behind UTC and without daylight saving since 1994; India uses UTC plus 5:30. That leaves a constant gap of ten and a half hours.
Chiclayo, Lima, Arequipa and Iquitos all share Peru time, so the slot you book works anywhere in the country. You choose in your own clock and the mentor sees the India time.
Progress
Our milestones, each checked with a query you write and explain.
| Step | What you can do | How it is shown |
|---|---|---|
| 1. Select | Filter, sort and limit rows from one table | A query written from a spoken question |
| 2. Aggregate | Group, count and sum, and filter groups with HAVING | The duplicate-day query from the lesson |
| 3. Join | Combine tables without losing or doubling rows | Row counts before and after every join |
| 4. Check | Prove a key is unique and two columns agree | A short data-quality report |
| 5. Analyse | Use window functions and subqueries for real questions | Running totals and rankings, explained |
| 6. Report | Turn queries into a dashboard or report others trust | A report with sources, licence and checks |
Milestone 4 is the lesson on this page. It is the one that makes colleagues trust your numbers.
If a month has twice as many rows as its neighbours, the data is telling you something before the total is.
Each milestone leaves a query file and a short write-up the learner can show.
Our certificate of completion is our own and is not a Peruvian university qualification.
More courses
For analysts adding skills, for developers, and for teenagers. All live, all in English.
PE / AN / 01
Four months of spreadsheets and Power BI dashboards.
Open the syllabusPE / AN / 02
The maths behind every report, without code.
Open the syllabusPE / AN / 03
Python, machine learning and deep learning after SQL.
Open the syllabusPE / DEV / 01
Python from zero, the partner of SQL in analysis.
Open the syllabusPE / DEV / 02
Applications that read and write a database.
Open the syllabusPE / DEV / 03
Make the monthly report build itself, query to file.
Open the syllabusPE / TEEN / 01
Programming from zero for secundaria students.
Open the syllabusPE / TEEN / 02
For 14 to 18 year olds who know some Python.
Open the syllabusPE / TEEN / 03
Node, APIs and databases, from zero.
Open the syllabusHow it works
Any day, any time, flexible: choose a batch, or for a very personalised plan choose 1-on-1 at the hour that suits your family.
Daytime
Peru mornings and lunchtimes fall in the Indian evening, an easy fit.
After work
A Peru evening is an Indian early morning, and mentors teach then too.
1-on-1
Your data, your questions, your hour.
You type it; the mentor asks what it will return first.
Open registers with real flaws, not perfect samples.
Who knows your work and your weak spots.
Short sentences, keywords explained, no rush.
Every total is checked a second way.
A group of fifteen to twenty, or a private class.

AI and ML
An AI nutrition coach that reads what you eat and works you toward a target.

AI and ML
A chatbot that answers mathematics and programming questions, built and deployed by a student.

AI and ML
An assistant that helps a young person recognise unsafe situations online.

Web app
A weather forecasting site with live conditions for any location.
Fees
One month at a time. We charge in US dollars, card only; soles appear only once your bank has converted the charge at its own rate, so allow for a small difference on the statement.
Free first class
Free
no card required
Group batch
$100 USD
a month, eight live classes
One to one
$150 USD
a month, eight live classes
What families say
Learners and parents on Google, quoted exactly.
★★★★★
"The one step solution for my son. Modern Age Coders make learning coding so simple that kids love it. The teachers explain complex concepts clearly with practical exercises and interactive content."
Ria Mukherjee
Parent
★★★★★
"Modern Age Coders has been a game-changer for me. I struggled to grasp IT concepts and coding before joining, but their classes transformed everything. I can now confidently write complex programs with ease."
Samriddha Mondal
Student
★★★★★
"One of the most wonderful education centres out there. Education is not limited to school syllabus but focuses on skill development."
Vansh Agarwal
Student
★★★★★
"My child Dhairya is really enjoying the Modern Age Coders classes. This is his first online class and he eagerly looks forward to it. I can already see his improvement, and the teachers are very cooperative."
Sonam Oswal
Parent of Dhairya
★★★★★
"Modern Age Coders have wonderful teachers who teach in a clear, easy and practical way. The teacher boosts students' confidence and inspires them to learn without hesitation."
Sonu Goyal
Parent
★★★★★
"I highly recommend this computer coding class! The teachers are incredibly knowledgeable and passionate about coding."
Ritu Kedia
Parent
Questions from Peru
No. Classes are live, online and in English only. Mentors in India use short sentences, explain each keyword plainly and adapt to your pace and accent; SQL itself is written in English words.
Yes. Both adult courses and the teen course start with a first SELECT. If you already use spreadsheets, you will recognise many ideas.
SQL first for most analysts, because it is how data is fetched from company systems; Python follows for cleaning, charts and automation. Our analysis course teaches both in that order.
MySQL in the database course, and SQLite in lessons like the one on this page because it comes with Python. The SQL you learn carries over to PostgreSQL, SQL Server and others with small differences.
Partly. Lessons mix international datasets with Peruvian registers such as Chiclayo's waste-collection table, which the Municipalidad Provincial de Chiclayo publishes openly with attribution required (ODC-By).
Any day, any time, flexible: choose a batch, or for a very personalised plan choose 1-on-1 at the hour that suits your family. Our mentors are ten and a half hours ahead, so a 19:30 class in Peru starts at 06:00 the next morning in India.
Basic queries take a few weeks. Being trusted with real reporting, joins and data checks takes months; our analysis course runs 8 to 10 months and the MySQL course 7 to 8.
Yes, MySQL for teens, ages 13 to 18, over 5 to 6 months, taught in teen-only groups.
The monthly fee is listed in the fees section in US dollars, which is how your card is charged; your bank converts to soles. From India the page shows rupees. The first class is free, with no card.
Pass the final exam and we issue our own certificate of completion. No Peruvian university or state body is involved in it, so the queries and reports you can show matter more.
No. The register is open data that anyone may use with credit, which we give; the findings here are our own analysis, and we have no link with the municipality.
Read next
Further reading on data, for Peru.
The next step after SQL, explained in Spanish.
Learning to code beside a job in Peru.
Courses alongside a Peruvian degree.
Every Peru page in one index.
Our analytics course, described in full.
One live class, from start to end.
Part of the guide: Every Peru page
More guides: Coding and AI classes in Peru · En español: clases de programación en inglés · Start here: English-medium coding in Lima · By age and stage: AI and coding for professionals · Exams, olympiads and school holidays: IB computer science tutor · Guides to choosing: An English-taught option to Crack The Code · Regions of Peru: Amazonas region · Cities: Arequipa: coding for every age · Lima and Callao districts: Programación para niños en Ancón
Start here
In the free class you write a first query on a real table with the mentor and talk about the data you work with. The mentor sees how you think about tables and how the English feels, then suggests a course.
Reading first is fine: see what happens in a class, or open any course syllabus.
WhatsApp us · +91 91233 66161 · connect@modernagecoders.com
Classes are live and online, in English only, with mentors in India. For a quick answer, message us on WhatsApp in English.
A priority demo is a full class of about 45 to 60 minutes. After the class the mentor sends a written skill report and a personal learning roadmap on WhatsApp. If you enrol, the demo fee is adjusted against your first month's fee. Share your demo Order ID with us on WhatsApp and we take it off.
Book a priority demo