Så byggde jag en lösning för att prata med vår försäljningsdata från Zettle
Tänk om du kunde ställa frågor till din försäljningsdata – precis som till en kollega – och få svaret direkt. I veckan testade jag att bygga en enkel prototyp som gör just det, genom att låta en LLM skapa SQL-frågor mot vår Zettle-data. Resultatet? Snabbare svar, roligare analys och helt nya insikter.

På sommaren driver jag och min fru utomhusleklandet Lustiga landet utanför Örebro. För att hantera betalningar använder vi Zettle och via detta system får vi en viss begränsad rapportering om hur många besökare vi haft eller hur mycket vi sålt för.
Många diskussioner och planeringsmöten brukar involvera spontana frågor som rör försäljning. Det kan vara ganska generiska frågor som
- “hur många besökare kom det egentligen i maj nu igen?”
till väldigt specifika frågor som - “hur många cheeseburgare gick det åt per besökande barn i juli?”.
I mitt stilla sinne har jag alltid tänk att det vore ju fantastiskt om man kunde ställa frågan direkt till sin data. Jag får helt enkelt bygga ett data warehouse nån gång. Och så skriva en massa SQL så fort en fråga dyker upp. Jaja, kanske nästa vecka…
Men LLM:er är ju bra på att skriva SQL – det har man ju hört. Det vore ju kanon om jag kunde få den att göra jobbet åt mig. Så om visionen är att kunna prata med datan, vad vore en användbar minsta möjliga lösning att börja med? Kanske läsa in datan i en databas, låta en LLM skapa SQL utifrån en användarfråga och sen köra SQL:en mot databasen? Japp – jag testar det!
Lösningen

I denna lösning använde jag gpt-5-nano och -mini.
Så nu har jag då äntligen kommit till det spännande steget när jag kan provköra hela kedjan! För att verifiera vad den håller på med så kan man roa sig med att skriva ut SQL:en – i alla fall initialt. Sen när man börjar lita på lösningen kan man även ta bort det steget.
Här kommer nu några exempel
Hur många burgare har vi sålt per dag de senaste 10 dagarna och vad är snittet?
Den genererade SQL:en
SELECT date, SUM(quantity) AS total_qty, AVG(SUM(quantity)) OVER () AS avg_per_day
FROM sales WHERE date BETWEEN date(’now’, ’-9 days’) AND date(’now’)
AND year = 2025
AND product_name LIKE ’%burgar%’ — match variations: Hamburgare, Cheeseburgare, Meny Hamburgare, Meny Cheeseburgare
GROUP BY date
ORDER BY date;
Svaret från LLM:en
Totalt sålda burgare per dag under de senaste 10 dagarna:
2025-08-05: 21
2025-08-06: 13
2025-08-07: 39
2025-08-08: 9
2025-08-10: 43
2025-08-11: 17
2025-08-12: 12
2025-08-13: 9
Medel per dag: 20.375 burgare.
Notera att det var stängt den 4:e och 9:e.
”Hur många besökare kom procentuellt per veckodag i juli?
”
Den genererade SQL:en
SELECT weekday, SUM(quantity) AS visitors, ROUND(100.0 * SUM(quantity) / (SELECT SUM(quantity)
FROM sales WHERE year = 2025 AND month = 7
AND product_name IN (’Inträde vuxen’,’Inträde barn 2-16 år’,’Inträde pensionär’,’Kalas inträde barn’,’Inträde förening’)), 2) AS percent_of_total
FROM sales
WHERE year = 2025 AND month = 7
AND product_name IN (’Inträde vuxen’,’Inträde barn 2-16 år’,’Inträde pensionär’,’Kalas inträde barn’,’Inträde förening’)
GROUP BY weekday
ORDER BY visitors DESC;
Svaret från LLM:en
Antalet besökare i juli per veckodag (procentandel av totala besökare):
Wednesday 22.27%, Thursday 16.27%, Tuesday 16.01%, Monday 12.38%, Friday 11.61%, Sunday 10.79%, Saturday 10.67%.
"Hur många hamburgare såldes under maj respektive juni"
Den genererade SQL:en
SELECT strftime(’%m’, date) AS month, SUM(quantity) AS total_qty
FROM sales WHERE year = 2025 AND month IN (5,6)
AND ( product_name LIKE ’%Hamburgare%’ OR product_name LIKE ’%Cheeseburgare%’ OR product_name LIKE ’%Meny Hamburgare%’ OR product_name LIKE ’%Meny Cheeseburgare %’ )
GROUP BY month
ORDER BY month;
Svaret från LLM:en
Maj: 0 sålda hamburgare. Juni: 34 sålda hamburgare
"Hur många cheeseburgare med eller utan meny gick det åt per besökande barn i juli?
Den genererade SQL:en
SELECT SUM(CASE WHEN product_name IN (’Cheeseburgare’, ’Meny Cheeseburgare ’)
THEN quantity ELSE 0 END) * 1.0 / NULLIF(SUM(CASE WHEN product_name IN (’Inträde barn 2-16 år’, ’Kalas inträde barn’)
THEN quantity ELSE 0 END), 0) AS cheeseburgare_per_visiting_child
FROM sales WHERE year = 2025 AND month = 7;
Svaret från LLM:en
Det gick i genomsnitt 0,1776 cheeseburgare (inkl. meny) per besökande barn i juli.
Slutligen
Som synes är SQL:en som genereras inte trivial – men detta fungerar faktiskt väldigt bra! Det är dessutom roligt och effektivt att fråga ut sin data på detta sätt. Man ställer en fråga, får ett svar, omformulerar sin fråga lite och får ett nytt svar. Detta är en lösning som alla borde få chansen att testa mot sin egen data. Jag garanterar att du kommer få nya insikter!
Vill du veta mer så hör av dig!