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

Firebird数据库GROUP BY语句查询SKU对应尺码区间报错咨询

问题原因
  • Firebird 不支持在 GROUP BY 子句中直接引用 SELECT 列表中定义的列别名,你写的 GROUP BY SHORTSKU, SIZEFROM, SIZETO 里的三个别名都无法被识别
  • 两个获取尺码名称的子查询属于关联计算列,Firebird 不支持将这类动态计算的关联子查询结果直接放到 GROUP BY 中做分组依据
  • 原 SQL 中冗余关联了 TALLESPORARTICULOS 表(别名TA)但未使用,反而会导致数据重复放大,增加不必要的计算开销
  • 额外注意:你原SQL中引用的codigoparticular字段和你提供的表结构中的LongSKU字段名不一致,以下代码已修正为实际字段名LongSKU
解决方法

思路:用两次 JOIN 直接关联 TALLESPORARTICULOS 表分别获取起始、结束尺码名称,GROUP BY 直接使用原始计算逻辑和关联字段,避免使用别名和关联子查询。

CREATE OR ALTER VIEW RANGOSPARACOSTOSYPRECIOS(
SHORTSKU,
SIZEFROM,
SIZETO,
PRICE ) AS 
select 
  substring(ar.LongSKU from 1 for 10) AS SHORTSKU,
  ts_from.Sizes as SIZEFROM,
  ts_to.Sizes as SIZETO,
  max(RT.PRICE) as PRICE
from Articulos Ar
Inner Join rangostalle RT On AR.productId = RT.productId
-- 关联获取起始尺码名称
left join TALLESPORARTICULOS ts_from 
  on ts_from.ProductId = Ar.ProductId 
  and ts_from.Position = RT.FromPosition
-- 关联获取结束尺码名称
left join TALLESPORARTICULOS ts_to 
  on ts_to.ProductId = Ar.ProductId 
  and ts_to.Position = RT.ToPosition
GROUP BY 
  substring(ar.LongSKU from 1 for 10), -- 直接写计算逻辑,不用别名
  ts_from.Sizes,
  ts_to.Sizes;
结果验证

执行视图查询SELECT * FROM RANGOSPARACOSTOSYPRECIOS即可得到你预期的结果,针对你提供的测试数据,注意TALLESPORARTICULOS插入语句存在笔误:ProductId=1的XXTRALARGE尺码Position字段值误写为1,应改为5,调整测试数据后即可完全匹配预期输出。

内容的提问来源于stack exchange,提问作者Nir Strahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:06:07