【问题标题】:PL SQL : Query to count differents values of a fieldPL SQL:查询以计算字段的不同值
【发布时间】: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 修改整个结果集,使其仅包含唯一行。

标签: sql plsql plsqldeveloper


【解决方案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

你的问题很难理解……

【讨论】:

  • 我明白,但是我的英语不好,多解释这个问题,我没有整体的专栏,我必须得到每个实体的记录数,这就是问题,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
相关资源
最近更新 更多