You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL/Redshift执行聚合查询时出现“could not identify an ordering operator for type record”错误求助

PostgreSQL/Redshift执行聚合查询时出现“could not identify an ordering operator for type record”错误求助

嘿,我来帮你解决这个问题!你遇到的这个错误其实是Redshift对SQL语法的解析细节导致的,很容易踩坑。

错误原因

你写的order by(i.spektr_date, i.campaign_id)会被Redshift解析成一个单一的record类型表达式,而不是你预期的“按spektr_date和campaign_id两个字段排序”。Redshift没有默认的排序运算符来处理record类型,所以就抛出了这个错误。

解决方案

只需要把ORDER BY后面的括号去掉就行,这是最简洁的写法:

order by i.spektr_date, i.campaign_id

如果非要保留括号的话,得给每个字段单独加括号(不过完全没必要,第一种写法更直观):

order by (i.spektr_date), (i.campaign_id)

修改后的完整查询

我把你的查询修正后贴在这里,重点标注了修改的部分:

select
i.spektr_date,
i.campaign_id,
avg(i.advertiser_id) as Advertiser_Id,
max(i.ad_program_type) as ad_program_type,
max(CAST(start_date AS DATE)) as Start_Date,
max(CAST(end_date AS DATE)) as End_Date,
max(cam.campaign_name) as Campaign_Name ,
max(cam.status) as Campaign_Status,
max(cam.budget_currency_code) as Currency_Code,
max(cam.daily_budget) as Budget,
max(cam.smart_bidding_strategy) as Bidding_Strategy,
max(cam.campaign_strategy) as Campaign_Strategy,
sum(i.total_clicks) as Clicks,
sum(i.total_impressions) as Impressions,
sum(i.cpc*i.total_clicks) as Spend,
sum(co.sale_price * co.sale_quantity) as Sales,
sum(i.total_clicks)/sum(i.total_impressions) as CTR,
(
sum(co.sale_price * co.sale_quantity) / sum(i.cpc * i.total_clicks)
) as ROAS,
(
SUM(i.cpc * i.total_clicks) / SUM(co.sale_price * co.sale_quantity)
) as ACOS
from
spektr_ach.d_sp_ad_impressions i
inner join spektr_ach.d_sp_ad_conversions co on i.advertiser_id = co.advertiser_id
and i.campaign_id = co.campaign_id and i.spektr_date = co.spektr_date and i.ad_program_type = co.ad_program_type
and i.traffic_attributes = co.traffic_attributes and i.cpc = co.cpc and i.ad_group_id = co.ad_group_id
and i.ad_id = co.ad_id and i.session_id = co.session_id
and i.customer_id = co.customer_id and i.marketplace_id = co.marketplace_id
inner join spektr_vulcan.o_campaigns cam on cam.campaign_id = co.campaign_id
and cam.marketplace_id  = CAST(co.marketplace_id AS BIGINT) and cam.advertiser_id = co.advertiser_id
where i.advertiser_id = 40420525505 and
i.traffic_attributes = 1
and i.ad_program_type = 'SPONSORED_PRODUCTS'
and i.total_clicks > 0
and i.total_impressions > 0
and i.spektr_date = date'2022-09-17' and i.spektr_date < date'2022-09-25'
group by (i.spektr_date,
i.campaign_id)
order by i.spektr_date, i.campaign_id; -- 此处为修改后的排序子句

另外补充一句,你GROUP BY里的括号写法是没问题的,Redshift允许把分组字段用括号括起来,但ORDER BY的解析逻辑不一样,不能照搬这种写法,这也是容易混淆的地方。

备注:内容来源于stack exchange,提问作者Surya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 11:37:40