Resources

Insyt data catalogue

The Raket Parts tables you practice on. Fictional company, real numbers in every Path.

63tables
291,671rows
How the tables connect — worked example

Start with the grain: sales_orders has one row per order (so_ref is unique: 7,235 rows in this dataset snapshot). sales_order_lines has 20,851 lines, so one order can have many lines. customers has one row per customer (customer_ref is unique: 436 rows).

One row per order: aggregate the lines before treating the joined result as order-level data.

SELECT o.so_ref, o.customer_ref,
       COUNT(l.line_no) AS line_count,
       COALESCE(SUM(l.line_value), 0) AS order_line_value
FROM sales_orders o
LEFT JOIN sales_order_lines l ON o.so_ref = l.so_ref
GROUP BY o.so_ref, o.customer_ref;

Check: this produces 7,235 order rows in the documented snapshot. Compare COUNT(*) against COUNT(DISTINCT so_ref) in sales_orders. When joining other line-level tables such as payments or invoices, calculate at their own grain first: joining two many-side tables can multiply amounts.

Read a column's type and missing-value profile in the data dictionary. These relationships are inferred from the current dataset and must be revalidated when data changes.