Sql Firebird group by、count和extract具有无效表达式

Sql Firebird group by、count和extract具有无效表达式,sql,firebird,Sql,Firebird,有人能帮我处理sql吗? 我想计算一下HISTORICO_ACESSO表中有多少个同名的注册表 目前我的sql是: select (EXTRACT(DAY FROM ha.entrada)||'.'||EXTRACT(month FROM ha.entrada)||'.'||extract(YEAR FROM ha.entrada)) as DATA, coalesce(hae.os_exame, '-') as EXAME, coalesce((select nome

有人能帮我处理sql吗? 我想计算一下HISTORICO_ACESSO表中有多少个同名的注册表

目前我的sql是:

select
    (EXTRACT(DAY FROM ha.entrada)||'.'||EXTRACT(month FROM ha.entrada)||'.'||extract(YEAR FROM ha.entrada)) as DATA,
    coalesce(hae.os_exame, '-') as EXAME,
    coalesce((select nome from usuario u where ha.login = u.usuario), ha.login) as USUARIO,
    coalesce(hae.pagina, 'Visualização Listagem') as TIPO,
    COUNT(*) as QTDE

from
    historico_acesso ha
    left join historico_acesso_exame hae
    on ha.codigo = hae.cod_historico

group by
    DATA, EXAME,  USUARIO, TIPO
我有个错误:

动态SQL错误。 SQL错误代码=-104。 select列表中的表达式无效(未包含在聚合函数或GROUP BY子句中)

我的DDL是:

CREATE TABLE HISTORICO_ACESSO (
    CODIGO        INTEGER NOT NULL,
    COD_REGISTRO  VARCHAR(200),
    USER_AGENT    VARCHAR(500),
    LOGIN         VARCHAR(100),
    NIVEL         VARCHAR(10),
    ENTRADA       TIMESTAMP NOT NULL,
    SAIDA         TIMESTAMP,
    IDIOMA        VARCHAR(10),
    INFO_EXTRAS   BLOB SUB_TYPE 0 SEGMENT SIZE 80
);

ALTER TABLE HISTORICO_ACESSO ADD PRIMARY KEY (CODIGO);

我认为Firebird不支持
组中的别名。试试这个:

select (EXTRACT(DAY FROM ha.entrada)||'.'||EXTRACT(month FROM ha.entrada)||'.'||extract(YEAR FROM ha.entrada)) as DATA,
       coalesce(hae.os_exame, '-') as EXAME,
       coalesce((select nome from usuario u where ha.login = u.usuario), ha.login) as USUARIO,
       coalesce(hae.pagina, 'Visualização Listagem') as TIPO,
       COUNT(*) as QTDE
from historico_acesso ha left join
     historico_acesso_exame hae
     on ha.codigo = hae.cod_historico
group by (EXTRACT(DAY FROM ha.entrada)||'.'||EXTRACT(month FROM ha.entrada)||'.'||extract(YEAR FROM ha.entrada)),
         coalesce(hae.os_exame, '-'),
         coalesce((select nome from usuario u where ha.login = u.usuario), ha.login),
         coalesce(hae.pagina, 'Visualização Listagem');

我认为Firebird不支持
组中的别名。试试这个:

select (EXTRACT(DAY FROM ha.entrada)||'.'||EXTRACT(month FROM ha.entrada)||'.'||extract(YEAR FROM ha.entrada)) as DATA,
       coalesce(hae.os_exame, '-') as EXAME,
       coalesce((select nome from usuario u where ha.login = u.usuario), ha.login) as USUARIO,
       coalesce(hae.pagina, 'Visualização Listagem') as TIPO,
       COUNT(*) as QTDE
from historico_acesso ha left join
     historico_acesso_exame hae
     on ha.codigo = hae.cod_historico
group by (EXTRACT(DAY FROM ha.entrada)||'.'||EXTRACT(month FROM ha.entrada)||'.'||extract(YEAR FROM ha.entrada)),
         coalesce(hae.os_exame, '-'),
         coalesce((select nome from usuario u where ha.login = u.usuario), ha.login),
         coalesce(hae.pagina, 'Visualização Listagem');

对于此查询,在对别名进行分组之前,您需要使用派生表来创建这些别名,或者需要按列索引进行分组,因此可以使用:

select DATA, EXAME, USUARIO, TIPO, COUNT(*) as QTDE
from (
    select
        (EXTRACT(DAY FROM ha.entrada)||'.'||EXTRACT(month FROM ha.entrada)||'.'||extract(YEAR FROM ha.entrada)) as DATA,
        coalesce(hae.os_exame, '-') as EXAME,
        coalesce(u.nome, ha.login) as USUARIO,
        coalesce(hae.pagina, 'Visualização Listagem') as TIPO
    from historico_acesso ha
    left join historico_acesso_exame hae
        on ha.codigo = hae.cod_historico
    left join usuario u
        on ha.login = u.usario
) a
group by DATA, EXAME, USUARIO, TIPO
请注意,我还将
usuario
上的子选择改为
left join
(实际上没有必要,只是我的偏好)。使用派生表需要Firebird 2.0或更高版本

或者,将“按列名分组”替换为“按列分组”索引:

group by 1, 2, 3, 4

对于此查询,在对别名进行分组之前,您需要使用派生表来创建这些别名,或者需要按列索引进行分组,因此可以使用:

select DATA, EXAME, USUARIO, TIPO, COUNT(*) as QTDE
from (
    select
        (EXTRACT(DAY FROM ha.entrada)||'.'||EXTRACT(month FROM ha.entrada)||'.'||extract(YEAR FROM ha.entrada)) as DATA,
        coalesce(hae.os_exame, '-') as EXAME,
        coalesce(u.nome, ha.login) as USUARIO,
        coalesce(hae.pagina, 'Visualização Listagem') as TIPO
    from historico_acesso ha
    left join historico_acesso_exame hae
        on ha.codigo = hae.cod_historico
    left join usuario u
        on ha.login = u.usario
) a
group by DATA, EXAME, USUARIO, TIPO
请注意,我还将
usuario
上的子选择改为
left join
(实际上没有必要,只是我的偏好)。使用派生表需要Firebird 2.0或更高版本

或者,将“按列名分组”替换为“按列分组”索引:

group by 1, 2, 3, 4

不要工作。谢谢,但我仍然有:
SQL错误代码=-104。select列表中的表达式无效(未包含在聚合函数或GROUP BY子句中)。
Dontt work man。谢谢,但我仍然有:
SQL错误代码=-104。select列表中的表达式无效(未包含在聚合函数或GROUP BY子句中)。
您使用的是哪个版本的Firebird?您使用的是哪个版本的Firebird?