Mode disclosure
All modes use one coherent workspace; only disclosure and guidance change. Learn mode keeps theory, concept names, full schema help, progressive hints, and solution review available.
Scalar Functions, Types, and Casting / debug query
RC-A04 - Build a two-dimensional grouped report at an explicit grain
RC-A04 - Build a two-dimensional grouped report at an explicit grain. Apply scalar functions and explicit casts with type-sensitive behavior.
- Result grain
- one row per customer
- Exact columns
- customer_id; customer_name; completed_orders
SQL editor shortcuts: Ctrl or Command Enter runs the query, Ctrl or Command Shift Enter checks it, Alt H opens the next hint, Ctrl or Command slash toggles a line comment, Ctrl or Command Shift F formats the SQL, and Escape closes transient UI.
Cursor at line 1, column 1.
Scenario
Retrieve the skill without relying on the lesson label.
Scalar Functions, Types, and Casting / debug query
One-sentence task
RC-A04 - Build a two-dimensional grouped report at an explicit grain. Apply scalar functions and explicit casts with type-sensitive behavior.
Learn mode disclosure
Theory, concept names, full schema help, and progressive hints are available.
Structured output contract
- Result grain
- one row per customer
- Exact columns
- customer_id; customer_name; completed_orders
- Source population
- Use the prompt setup plus FROM, JOIN, WHERE, and subquery predicates as the source population. Visible rows are only examples.
- Grouping
- Group only at the requested output grain: one row per customer.
- Ordering
- count completed orders only; order by completed_orders desc then customer_id
- Validation
- select-only; hidden deterministic variants.
Relevant tables
Time and difficulty
- Estimated time
- 8 minutes
- Difficulty
- 4/5
Objective and concepts
State the requested SQL output contract for scalar functions, types, and casting using source grain, columns, ordering, and edge-case evidence.
Glossary links
Concept material
SQL Trail treats every query as an evidence trail: identify source grain, transform rows deliberately, then compare output to a shared contract.
A passing query must handle hidden nulls, ties, boundaries, and no-match rows when the contract makes them relevant.
Syntax card
SELECT <requested_columns>
FROM <source_table>
WHERE <source_population_filter>
GROUP BY <result_grain_columns>
ORDER BY <deterministic_tie_breakers>;- <requested_columns> means the exact output columns, aliases, and order from the visible contract.
- <source_population_filter> means the row population definition, not a copied visible-row value.
- <deterministic_tie_breakers> means all ordering and tie rules needed for repeatable output.
Why this works
TRIM removes surrounding whitespace and LOWER normalizes case while preserving row grain.
Edge cases
Hidden variants preserve nulls, ties, duplicates, boundaries, no-match rows, and alternate row order when those risks apply.
PostgreSQL note
The local engine uses PostgreSQL-compatible syntax, including explicit NULL predicates, deterministic ORDER BY clauses, and transactional grading.
Worked example
SELECT customer_id, customer_name, LOWER(TRIM(city)) AS normalized_city FROM customers ORDER BY customer_id;Assumptions, dialect notes, and common traps
- Duplicate policy
- Preserve duplicate facts unless the prompt explicitly asks for distinct tuples or set semantics.
- Null policy
- Preserve NULL, empty string, zero, and false as distinct values unless the contract says to display a fallback.
- Tie-breakers
- Use every ordering rule in the contract and end tied business metrics with deterministic secondary keys when needed.
- Zero-related entities
- Preserve requested zero-related, no-match, or complete-period entities and make display fallback explicit.
- Numeric tolerance
- Use exact semantic comparison unless the activity explicitly declares a numeric tolerance.
PostgreSQL-compatible local checks
Queries run in a local PGlite worker with PostgreSQL-style syntax and transactional grading.
- Scalar functions preserve row grain: A text or length function is treated like an aggregate and expected to collapse rows. Repair: Apply scalar functions per row and keep the original row grain unless an aggregate is requested.
- Round after the full calculation: Source values are rounded before multiplication, producing near-boundary drift. Repair: Calculate first, then round the final expression at the requested precision.
- Cast before division: An integer division result is cast after the fractional part has already been discarded. Repair: Cast an operand to numeric before dividing.
- Not all text casts safely: Every raw text sample is cast directly and invalid or empty text aborts the query. Repair: Guard controlled text before casting and flag invalid rows explicitly.
Opened hints
No hints opened yet.