Firebird 无法识别 group by 子句中的计算列

问题描述 投票:0回答:2

我有以下 SQL:

select
inv.salesman_id,
(select salesman_goals.goal from salesman_goals
    where salesman_goals.salesman_id = inv.salesman_id
    and salesman_goals.group_id = g.group_id
    and salesman_goals.subgroup_id = sg.subgroup_id
    and salesman_goals.variation_id = v.variation_id)
    as goal,
sum(i.quantity) as qnt
from invoiceitem i
inner join invoice inv on inv.invoice_id = i.invoice_id
inner join product p on p.product_id = i.product_id
left join groups g on g.group_id = p.group_id
left join subgroup sg on sg.group_id = g.group_id and sg.subgroup_id = p.subgroup_id
left join variation v on v.group_id = sg.group_id and v.subgroup_id = sg.subgroup_id and v.variation_id = p.variation_id
group by
1,2

返回三列,第一列是销售员id,第二列是获取销售数量目标的子选择,第三列是实际销售数量。 即使按第一列和第二列分组,火鸟在执行查询时也会抛出错误:

Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
这是什么原因呢?

sql firebird
2个回答
4
投票

有一列“在选择列表中(不包含在聚合函数或 GROUP BY 子句中)”。即您在子选择中提到的除

inv.salesman_id
之外的每一列。这样的列每组有许多值。当存在 GROUP BY(或只是 HAVING,按所有列隐式分组)时,SELECT 子句每组返回一行。没有可返回的单一值。所以你想要(当你自己输入答案时):

group by
inv.salesman_id,
g.group_id,
sg.subgroup_id,
v.variation_id

2
投票

我找到了这个问题的解决方案。

问题是,如果您在

group by
子句中的列中有子查询,则该子查询中的参数也必须出现在
group by
中。所以在这种情况下,我所要做的就是:

group by
inv.salesman_id,
g.group_id,
sg.subgroup_id,
v.variation_id

就是这样。我希望如果将来有人遇到同样的问题,这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.