Here are 2 options equivalent to your original query which will only perform a single scan of table `foo`: Using a temp table ```sql CREATE TEMPORARY TABLE x AS SELECT x, min(y) min_y, max(y) max_y FROM foo GROUP BY (x/10); SELECT x, min_y FROM x UNION SELECT x, max_y FROM x; ``` In a single query ```sql SELECT DISTINCT x, CASE a WHEN 1 THEN min_y WHEN 2 THEN max_y END y FROM (SELECT x, min(y) min_y, max(y) max_y FROM foo GROUP BY (x/10)) JOIN (SELECT 1 a UNION ALL SELECT 2); ```