SELECT
    "sets"."set_num",
    "sets"."name",
    "sets"."year",
    "sets"."theme_id",
    "sets"."num_parts",
    "sets"."set_img_url",
    "sets"."set_url",
    "sets"."last_modified_dt",
    "sets"."mini_col",
    "sets"."set_check",
    "sets"."set_col",
    "sets"."u_id",
    {% block number %}
    CAST(SUBSTR("sets"."set_num", 1, INSTR("sets"."set_num", '-') - 1) AS INTEGER) AS "set_number",
    CAST(SUBSTR("sets"."set_num", INSTR("sets"."set_num", '-') + 1) AS INTEGER) AS "set_version",
    {% endblock %}
    IFNULL("missing_join"."total", 0) AS "total_missing",
    IFNULL("minifigures_join"."total", 0) AS "total_minifigures"
FROM sets

-- LEFT JOIN + SELECT to avoid messing the total
LEFT JOIN (
    SELECT
        "missing"."u_id",
        SUM("missing"."quantity") AS "total"
    FROM "missing"
    {% block where_missing %}{% endblock %}
    GROUP BY "u_id"
) "missing_join"
ON "sets"."u_id" IS NOT DISTINCT FROM "missing_join"."u_id"

-- LEFT JOIN + SELECT to avoid messing the total
LEFT JOIN (
    SELECT
       "minifigures"."u_id",
       SUM("minifigures"."quantity") AS "total"
    FROM "minifigures"
    {% block where_minifigures %}{% endblock %}
    GROUP BY "u_id"
) "minifigures_join"
ON "sets"."u_id" IS NOT DISTINCT FROM "minifigures_join"."u_id"

{% block where %}{% endblock %}

{% if order %}
ORDER BY {{ order }}
{% endif %}

{% if limit %}
LIMIT {{ limit }}
{% endif %}