Firebird 无法识别 group by 子句中的计算列
Firebird can't recognize calculated column in group by clause
我有以下 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
其中returns三列,第一列是销售员id,第二列是子select获取销售量目标,第三列是实际销售量。
即使按第一列和第二列分组,firebird 在执行查询时也会抛出错误:
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
这是什么原因?
有一列"in the select list (not contained in either an aggregate function or the GROUP BY clause)"。即除了 inv.salesman_id
之外,您在子选择中提到的每一列。这样的列每组有很多值。当有一个 GROUP BY(或只是一个 HAVING,按所有列隐式分组)时,一个 SELECT 子句 returns 每组一行。 return 没有单一值。所以你想要(当你自己回答时):
group by
inv.salesman_id,
g.group_id,
sg.subgroup_id,
v.variation_id
好的,我找到了解决这个问题的方法。
问题是,如果您在 group by
子句中的列中有一个子查询,则此子查询中的参数也必须出现在 group by
中。所以在这种情况下,我所要做的就是:
group by
inv.salesman_id,
g.group_id,
sg.subgroup_id,
v.variation_id
就是这样。希望对以后遇到同样问题的人有所帮助。
我有以下 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
其中returns三列,第一列是销售员id,第二列是子select获取销售量目标,第三列是实际销售量。 即使按第一列和第二列分组,firebird 在执行查询时也会抛出错误:
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
这是什么原因?
有一列"in the select list (not contained in either an aggregate function or the GROUP BY clause)"。即除了 inv.salesman_id
之外,您在子选择中提到的每一列。这样的列每组有很多值。当有一个 GROUP BY(或只是一个 HAVING,按所有列隐式分组)时,一个 SELECT 子句 returns 每组一行。 return 没有单一值。所以你想要(当你自己回答时):
group by
inv.salesman_id,
g.group_id,
sg.subgroup_id,
v.variation_id
好的,我找到了解决这个问题的方法。
问题是,如果您在 group by
子句中的列中有一个子查询,则此子查询中的参数也必须出现在 group by
中。所以在这种情况下,我所要做的就是:
group by
inv.salesman_id,
g.group_id,
sg.subgroup_id,
v.variation_id
就是这样。希望对以后遇到同样问题的人有所帮助。