我必须计算数据库中实体的数量,我必须获得出现的实体的注册数量
ENTITY OVERALL DATE HOUR
====== ===== ==== ====
ENT1 5 20100318 12:00
ENT2 20 20100318 12:00
ENT3 12 20100318 12:00
CURSOR1
SELECT distinct(rp.cod_entidad),
YYYYYYYYY,
to_date(to_char(SYSDATE,'YYYYMMDD'),'YYYY-MM-DD') as fecha_pago,
to_char(sysdate,'hh-mi-ss') as hora_pago
FROM registry rp, product pc
where pc.nro_solicitud = rp.nro_solicitud
and pc.resp_2= 'OK'
and pc.resp_1= 'OK'
答案 0 :(得分:2)
select entity, sum(overall)
from registry
group by entity
order by entity
你的问题很难理解......
答案 1 :(得分:2)
在您想要独特的列上使用GROUP BY
为了让PL-SQL不要抱怨,你必须使用一个聚合函数来为其他列选择一个值。
我选择了MAX()
,但MIN()
或不存在的whatever()
也会这样做。
SELECT
rp.cod_entidad,
count(*) as rowcount, -- number of rows per distinct rp.cod_entidad
MAX(to_date(to_char(SYSDATE,'YYYYMMDD'),'YYYY-MM-DD')) as fecha_pago,
MAX(to_char(sysdate,'hh-mi-ss')) as hora_pago
FROM registry rp
INNER JOIN product pc ON (pc.nro_solicitud = rp.nro_solicitud)
WHERE pc.resp_2 = 'OK' AND pc.resp_1 = 'OK'
GROUP BY rp.cod_entidad
<强> Implicit where join considered harmful 强>
附:请不要使用丑陋隐含的地方加入,这是令人困惑和不好的做法,因为您在where
条款中无条件地将选择标准与加入条件混合在一起。
自1993年以来,我们有明确的连接语法,我热烈推荐它
这将使编写正确的查询变得更加容易,这将使您的意图更加清晰。