Какие только костыли не выдумывали 😀
select if(length(slack_string) > 0, slack_string, 'OK') as slack_string
from (select arrayStringConcat(
arrayMap(x - > toString(x),
groupArray(if(to_alert = 'y', '<@user>\n', '') ||
'Campaign: ' || campaignName || '\n' ||
'Current cost: $' || toString(daily_cost) || '\n' ||
'Daily cap: $' || toString(daily_cap)
)),
'\n\n') as slack_string
from (select campaignName,
round(sum(daily_cost), 2) as daily_cost,
round(daily_cap, 2) as daily_cap,
case
when daily_cost >= toFloat64(daily_cap)
then 'y'
else 'n' end as to_alert
from (select campaign,
spot,
spot_id,
name as spot_name,
daily_cost as daily_cost,
daily_cap as daily_cap
from (select *
from (select campaign,
spot,
sum(cost) as daily_cost
from client.actions
where date = today()
and owner = '5fbb4d4b61d6e257153928a1'
group by 1, 2)
left join (select id as campaign,
daily_cap
from client.campaings
where owner_id = '5fbb4d4b61d6e257153928a1') using campaign)
left join (select spot_id,
spot_aid as spot,
name
from client.dictionary_spot
where name like '%opunder%') using spot
where name like '%_%')
left join (select campaignId as campaign,
campaignName
from client.dictionary_campaigns) using campaign
group by 1, 3)
where to_alert = 'y')