В качестве одного запроса ...
SELECT
MIN(id) AS id,
name,
parent_id,
school_id
FROM
yourTable
GROUP BY
CASE WHEN name = 'unknown' THEN id ELSE 0 END,
name,
parent_id,
school_id
Или, возможно ...
GROUP BY
CASE WHEN name <> 'unknown' THEN name ELSE CAST(id AS VARCHAR(???)) END,
parent_id,
school_id
-- Where VARCHAR(???) is the data type of the `name` field.
-- Also assumes no value in `name` is the same as an id for an 'unknown' field
Оба избегают UNION и накладных расходов на синтаксический анализ таблицы дважды, заменяя ее слегкаповышенная сложность GROUP BY
.