如何使用 count(*) 获取结果总数?



我需要获得每个人的结果总数,但我得到......

结果

我的查询..

选择 t.fecha_hora_timbre,e.nombre,e.apellido,d.descripcion as departamento_trabaja, t.fecha,count(*) From fulltime.timbre t, fulltime.empleado e, fulltime.departamento d 其中 d.depa_id=e.depa_id 和 t.codigo_empleado=e.codigo_empleado 和 trunc(t.fecha) 介于 trunc(to_date('15/02/2017','dd/mm/yyyy')) 和 trunc(to_date('14/03/2017','dd/mm/yyyy')之间) 分组按t.fecha_hora_timbre,e.nombre,e.apellido,d.descripcion,t.fecha

预期数据...

诺姆布雷 |阿佩利多 |DEPARTAMENTO_TRABAJA |VECES_MARCADAS(计数) 玛丽亚·塔西拉·伊格莱西亚斯·贝塞拉·阿尔卡尔迪亚 4 凯瑟琳·塔蒂亚娜·塞戈维亚 费尔南德斯·阿尔卡尔迪亚 10 弗雷迪·奥古斯丁·瓦尔迪维索·瓦列霍·阿尔卡尔迪亚 3

更新。

select e.nombre,e.apellido,d.descripcion as departamento_trabaja,COUNT(*)
from fulltime.timbre t, fulltime.empleado e, fulltime.departamento d
where d.depa_id=e.depa_id and t.codigo_empleado=e.codigo_empleado and
trunc(t.fecha) between trunc(to_date('15/02/2017','dd/mm/yyyy')) and trunc(to_date('14/03/2017','dd/mm/yyyy'))
group by t.fecha_hora_timbre,e.nombre,e.apellido,d.descripcion, t.fecha

您应该只选择并按您实际要计数的非聚合列进行分组。目前,您在每行中包含fecha_hora_timbrefecha列,因此您正在计算这些列的唯一组合以及您实际想要计算的名称/部门信息。

select e.nombre, e.apellido, d.descripcion as departamento_trabaja,
count(*) a veces_marcadas
from fulltime.timbre t
join fulltime.empleado e on t.codigo_empleado=e.codigo_empleado
join fulltime.departamento d on d.depa_id=e.depa_id
where t.fecha >= to_date('15/02/2017','dd/mm/yyyy')
and t.fecha < to_date('15/03/2017','dd/mm/yyyy')
group by e.nombre, e.apellido, d.descripcion

我已经删除了多余的列。请注意,它们已从选择列表和分组依据子句中消失。如果选择列表中有一个不在分组依据中的非聚合列,则会收到 ORA-00937 错误;但是,如果您在 Group-By 中有一列不在选择列表中,那么即使您看不到它并且您不会得到预期的结果,它仍然会按该列进行分组。

我还从旧式联接语法更改为现代语法。我已经更改了日期比较;首先,因为将trunc()作为trunc(to_date('15/02/2017','dd/mm/yyyy'))的一部分是没有意义的 - 您已经知道时间部分是午夜,因此 trunc 没有任何效果。但主要是这样,如果fecha上有一个索引,则可以使用该索引。如果执行trunc(f.techa)则必须截断每个列值的值,这将停止使用索引(除非您有基于函数的索引)。正如between在包容性中一样,使用>=<,一天后达到上限应该总体上具有相同的效果。

最新更新