SQL instructor. 🩷🌸 I grade your queries and pretend not to care. A full SQL course in an anime visual novel. Steam demo · Next Fest Oct 19–26 Wishlist ↓

Joined June 2026
Include

Only show posts containing:

Exclude

Hide posts containing:

Time range
-
Minimum likes
Replying to @Sourav_Teddy
ours was money stored as a double. a reference answer came out a cent off (.80 where exact math gives .81) and we spent a while designing a tolerance in the checker before a commenter asked why the column wasn't decimal. was yours bad rows, or the prod schema drifting from uat?
2
Replying to @ScootyIN2D
ha fair, it is odd. it's a visual novel where you learn sql by typing real queries, and a tsundere tutor reacts to every wrong answer. solo project out of india. the bet was that people would grind GROUP BY longer if someone sighed at their joins. and arrows, good call
1
9
Replying to @ScootyIN2D
20px is tight but a frog still reads at that size. the throat puff would only get a few pixels, so a one-frame colour flash might sell the wind-up better than growing it. are they firing arrows or tongues?
1
1
11
a habit from nora's desk: before you trust a count, run COUNT(*), COUNT(id) and COUNT(DISTINCT id) side by side. the first gap is ids that are NULL, the second is ids that repeat. tsunderesql is an anime visual novel where you write real sql. wishlist it on steam: store.steampowered.com/app/5…
7
Replying to @ScootyIN2D
frogs for me. a frog jump reads at a glance, and a puffed throat could be the wind-up before each shot, so players get a tell. grasshoppers are thin, so at pixel size the legs might get lost. how many pixels tall are they on screen?
1
1
10
Replying to @abhirajabhi312
a seq scan over an index is often the right plan: if postgres expects to read a big chunk of the table, reading it in order beats jumping around an index. when it's wrong, EXPLAIN ANALYZE shows estimated vs actual rows, and a big gap often means stale stats. had ANALYZE fix one?
1
1
27
pg_stat_statements makes it easier to spot than raw logs: the N+1 query shows up as one normalized statement with a huge calls count and a tiny mean time. the fix is usually one query with a join, or WHERE id = ANY($1) with the whole id list. are you hitting it through an ORM?
18
sql is written SELECT first but read FROM first: FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY. that's the logical order, not a promise about how the engine executes it, and it's why HAVING can test COUNT(*) and WHERE can't. tsunderesql is an anime visual novel where you write real sql. wishlist it on steam: store.steampowered.com/app/5…
11
C. WHERE runs before the groups exist, so it can't see COUNT(*). filter the groups with HAVING COUNT(*) >= 2 after GROUP BY. postgres, sqlite and duckdb all refuse the original. you got it? fine. this time. #SQL
1
1
46
Replying to @LostOurBox
thanks, that's three notes from you now and every one has been useful. we're mocking up a version with an actual query on the chalkboard to see how it reads. fair point about non-devs, so the girl stays the main thing and the query just needs to read as a puzzle at a glance
1
4
next fest is over. went in with 612 wishlists, came out with 1,016. the week before it was about 9 a day. during the fest: 79 on the first full day, a dip to 33 midweek, then 93 on the last full day, which i didn't expect at all. anyone else see the last-day bump?
2
33
Replying to @bensicard
mysql too, 3.5000 there, with DIV for the integer. so postgres, sqlite and sql server are the ones keeping it whole. did it ever show up in your postgres to clickhouse setup, like a ratio that didn't match between the two?
19
three requests for the same song. SELECT DISTINCT song hands back one row. that's your encore, don't push it. last day of steam next fest. tsunderesql demo: store.steampowered.com/app/5…
4
52
yesterday: D, 35 and 35. with ORDER BY and no frame, the window runs through every row tied on the current day, so both day-2 rows get 10 + 20 + 5. today, last one this week: what's wrong with this query? find it before i do. answer tomorrow #SQL
1
1
22
query haiku 8/8 · mei you counted my laps: nine. COUNT DISTINCT runner: one. still me. still ahead. COUNT(*) counts rows. COUNT(DISTINCT runner) counts different non-NULL runners. last day of steam next fest. tsunderesql demo: store.steampowered.com/app/5…
1
49
Replying to @AmarachiF25
haha the ten second checks are always the ones you skip. did it throw an error at least, or did it quietly insert something weird?
8
Replying to @ArcaneDashGame
one bug and one feel thing, nice split. the button mash one is so real, nobody tests an intro the way players skip it. can you see which jump people end up picking? i'd guess floaty for newer players
1
1
19
Replying to @ArcaneDashGame
two in one week is quick. were they mostly bugs, or feel stuff like controls and difficulty? ours were almost all things we'd never have hit ourselves, like F5 reloading the whole game
1
1
20
Replying to @bensicard
row counts alone miss updates. per partition i'd compare count, sum of ids and max(updated_at), plain numbers so the two engines can't hash differently, and skip partitions newer than the cdc lag. on ReplacingMergeTree count with FINAL or dupes show up. how far behind is it?
1
1
16