Я вполне уверен, что вы делаете это более сложным, чем нужно.Помещение вашей агрегации в суб-выборку в вашем наборе результатов действительно портит то, что вы пытаетесь сделать.Разве это не будет (не проверено с данными, подтвержденный синтаксис) работать так же хорошо?
SELECT top 10 d.app_name AS publisher_app_name, a.publisher_app AS publisher_app_id,
CASE WHEN SUM(a.impressions) > 0
THEN ROUND((1000*SUM(a.money_spent))/SUM(a.impressions),3)
ELSE 0
END AS top_10_adv_ecpm,
SUM(a.converted_installs) AS installs_publisher
FROM warehouse.daily_uber_aggr a
LEFT JOIN dimensions.apps d ON d.app_id = a.publisher_app
WHERE a.publisher_app IN ('983234fb17ba470008','2b3ed6ff4d0e48463')
AND a.dt BETWEEN '2018-12-26' AND '2019-01-25'
GROUP BY d.app_name, a.publisher_app
ORDER BY SUM (converted_installs) DESC
Обратите внимание, я изменил LIMIT 10
на top 10
, потому что это было помечено как SQL Server, если это другой бренд базы данных, такойпоскольку MySQL затем использует соответствующие средства, чтобы ограничить ваши первые 10 результатов.
FWIW проблема с исходным запросом заключается в том, что у вас нет связи между вашим запросом и подзапросом в наборе результатов, поэтому для каждой строкиВаш основной запрос возвращает, что вы запустили подзапрос и вернули его полные результаты.