如何在Firebird中使用GROUP BY?

时间:2015-10-23 04:50:22

标签: group-by firebird firebird2.5

我正在尝试在Firebird中使用GROUP BY创建SELECT,但我无法取得任何成功。我怎么能这样做?

异常

Can't format message 13:896 -- message file C:\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
(49,765 sec)

试图

SELECT FA_DATA, FA_CODALUNO, FA_MATERIA, FA_TURMA, FA_QTDFALTA,
               ALU_CODIGO, ALU_NOME,
               M_CODIGO, M_DESCRICAO,
               FT_CODIGO, FT_ANOLETIVO, FT_TURMA
               FROM FALTAS Falta
               INNER JOIN ALUNOS Aluno ON (Falta.FA_CODALUNO = Aluno.ALU_CODIGO)
               INNER JOIN MATERIAS Materia ON (Falta.FA_MATERIA = Materia.M_CODIGO)
               INNER JOIN FORMACAOTURMAS Turma ON (Falta.FA_TURMA = Turma.FT_CODIGO)
               WHERE (Falta.FA_CODALUNO = 238) AND (Turma.FT_ANOLETIVO = 2015) 
               GROUP BY Materia.M_CODIGO

2 个答案:

答案 0 :(得分:1)

在firebird中简单使用group by,按所有列分组

 select * from T1 t
where t.id in
(SELECT t.id FROM T1 t 
 INNER JOIN T2 j  ON j.id = t.jid 
 WHERE t.id = 1
 GROUP BY t.id)

答案 1 :(得分:1)

使用GROUP BY在您的示例代码中没有意义。它仅在使用聚合函数(+其他一些次要用途)时才有用。在任何情况下,Firebird都要求您指定SELECT列列表中的所有列,但GROUP BY子句中具有聚合函数的列除外。

请注意,这比SQL标准更具限制性,SQL标准允许您省略功能相关的列(即,如果指定主键或唯一键,则不需要指定该表的其他列)。

您没有指定要分组的原因(因为使用此查询执行此操作没有多大意义)。也许你希望ORDER BY,或者你想要每个M_CODIGO的第一行。