я не очень понял вашу проблему если честно, что именно вам мешает в промежуточных именах...
так достаточно эстетично?
SELECT name, price, avgPrice
from (
SELECT
groupArray((t.name, t.price)) as col,
avg(price) as avgPrice
FROM (-- data simulation
SELECT arrayJoin([(3, 'a'), (5, 'b'), (3, 'c'), (3, 'd')]) as col, col.1 as price, col.2 as name
) as t
)
ARRAY JOIN col, col.1 as name, col.2 as price
WHERE price > avgPrice
почти ) избавился от промежуточных имен, теперь бы не хотелось зависеть от порядка упаковки значений
(name, price)
при распаковке
col.1 as name, col.2 as price
, но динамические имена колонок просто так не даются ((
В боевых условиях полей не 2 )
SELECT col.1 as name, col.2 as price, avg
FROM (
SELECT arrayJoin(groupArray((name, price))) as col, avg(price) as avg
FROM (
SELECT arrayJoin([(3, 'a'), (5, 'b'), (3, 'c'), (3, 'd')]) as col, col.1 as price, col.2 as name
)
)
WHERE price > avg;