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查询,字段名添加中文别名,查询结果的字段名会显示问号,处理方法:

PL/SQL无法查询过滤中文字段解决方案

pl/sql查询字段为科学计数法

库存 SQL 查询出现歧义错误,其中两个字段应相等以进行计算。 MS-ACCESS

mysql 查询时 按照某个字段计算后的值 排序?

sql根据一个字段不同值查询不同表中的一个字段