我正在尝试在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
答案 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
的第一行。