PL SQL: запрос для подсчета разных значений поля - PullRequest
0 голосов
/ 31 мая 2011

Мне нужно подсчитать количество сущностей в базе данных, чтобы получить количество реестров для сущностей, которые появляются

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'

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Используйте 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

Неявное, где объединение считается вредным
PS Пожалуйста, не используйте это уродливое неявное выражение «присоединение», это сбивает с толку и является плохой практикой, поскольку вы смешиваете критерии выбора с критериями объединения в своем предложении where безо всякой причины.
МыУ меня явный синтаксис объединения с 1993 года, я настоятельно рекомендую его.
Это значительно облегчит написание правильных запросов и сделает ваши намерения более ясными.

2 голосов
/ 31 мая 2011
select entity, sum(overall)
from registry
group by entity
order by entity

Ваш вопрос сложен для понимания ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...