ProgrammatieRapportageanalist (SQL Analyst)

Wat is het verschil tussen de aggregatiefunctie SUM() en de vensterfunctie SUM()? In welke situaties is het beter om vensterfuncties te gebruiken? Geef een voorbeeld.

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord

De aggregatiefunctie SUM() telt waarden op over de hele groep rijen in de resultset en retourneert één waarde voor elke groep (of voor de gehele query). De vensterfunctie SUM() maakt het mogelijk om de som te berekenen over een "venster" van waarden, gedefinieerd binnen de SELECT (met OVER()), waarbij elke rij behouden blijft in het resultaat en toegang heeft tot de geaggregeerde uitkomst van haar "venster". Dit is vooral handig voor het verkrijgen van tussenresultaten per groep.

Voorbeeld van een aggregatiefunctie:

SELECT department_id, SUM(salary) FROM employees GROUP BY department_id;

Voorbeeld van een vensterfunctie:

SELECT department_id, salary, SUM(salary) OVER (PARTITION BY department_id ORDER BY hire_date) FROM employees;

Misleidende vraag

“Kun je een cumulatieve (‘lopende’) som over een kolom alleen met behulp van de aggregatiefunctie GROUP BY krijgen?”

Antwoord: Nee! GROUP BY geeft alleen de uiteindelijke aggregaten, een lopende som vereist ofwel een vensterfunctie, of complexe subquery's, die moeilijker en langzamer zijn.

Voorbeeld:

SELECT salary, SUM(salary) OVER (ORDER BY hire_date) AS running_total FROM employees;

Verhaal

In het transactie rapport werd de lopende som gerealiseerd met meerdere gecorreleerde subquery's. Bij groei van de tabel daalde de prestaties tientallen keren. Overgestapt op de vensterfunctie — alles terug naar enkele seconden.


Verhaal

De poging om complexe analyses met totals per groep via GROUP BY uit te voeren resulteerde in meerdere fasen van export en verwerking in externe software. Vensterfuncties maakten het mogelijk om het benodigde rapport in één SQL-query te genereren.


Verhaal

Een analist schreef een query met vensterfuncties, met gebruik van een verkeerde PARTITION BY — de resultaten voor verschillende groepen werden door elkaar gehaald. Resultaat — vervormde rapportage. Na correctie van de groepering waren de gegevens correct.