PL SQL:查询以计算字段的不同值
Posted
技术标签:
【中文标题】PL SQL:查询以计算字段的不同值【英文标题】:PL SQL : Query to count differents values of a field 【发布时间】:2011-05-31 17:45:09 【问题描述】:我必须对数据库中的实体数量进行计数,我必须为出现的实体获取注册表的数量
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'
【问题讨论】:
如果您没有意识到:select distinct(x), y...
并不意味着distinct
仅适用于x
。它不是一个函数。 distict
修改整个结果集,使其仅包含唯一行。
【参考方案1】:
在您希望唯一的列上使用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 join,这是令人困惑和不好的做法,因为您无缘无故地将选择标准与 where
子句中的连接标准混合在一起。
自 1993 年以来,我们就有了明确的连接语法,我强烈推荐它。
这将使编写正确的查询变得更加容易,并使您的意图更加清晰。
【讨论】:
我猜YYYYYYY
是解决方案的占位符,应该替换为count(*)
。【参考方案2】:
select entity, sum(overall)
from registry
group by entity
order by entity
你的问题很难理解……
【讨论】:
我明白,但是我的英语不好,多解释这个问题,我没有整体的专栏,我必须得到每个实体的记录数,这就是问题,谢谢以上是关于PL SQL:查询以计算字段的不同值的主要内容,如果未能解决你的问题,请参考以下文章
PL/SQL查询,字段名添加中文别名,查询结果的字段名会显示问号,处理方法: