я не совсем доверяю, что вы размещены ...
Ваш запрос должен бросить ORA-00979: Not a GROUP BY expression
. Это связано с тем, что столбцы, не включенные в аналитическую функцию, а именно username
, не отражаются в вашем group by
.
ORA-00920 подразумевает, что вам не хватает одного из следующих вариантов: =, <>, not in, in, !=, is not null, is null, not like, like
и т. Д. Вы уверены, что разместили правильный запрос?
В 11.2, создавая то, что приближает вашу таблицу, например, так:
create table host
( username varchar2(100)
, created_dt date);
insert into host
select level, sysdate - level
from dual
connect by level <= 10
;
insert into host
select chr(ascii(level) + 32), sysdate - level
from dual
connect by level <= 10
;
commit ;
, а затем, выполнив запрос опубликовал результаты в ORA-00979. Изменение этого на следующие работы в порядке .:
select case when regexp_like(username, '^\d+$') then 'GRP_OTHERS'
else username end as username
, count(*)
from host
where created_dt between
to_date('2012-may-23 00:00:00', 'yyyy-mon-dd hh24:mi:ss') and
to_date('2012-may-23 23:59:59', 'yyyy-mon-dd hh24:mi:ss')
group by case when regexp_like(username, '^\d+$') then 'GRP_OTHERS'
else username end
;
Это может быть альтернативно переписано как:
select distinct username
, count(*) over (partition by case when regexp_like(username, '^\d+$')
then 'GRP_OTHERS'
else username end)
from host
where created_dt between
to_date('2012-may-23 00:00:00', 'yyyy-mon-dd hh24:mi:ss') and
to_date('2012-may-23 23:59:59', 'yyyy-mon-dd hh24:mi:ss')
Я думаю, что это второй вопрос больше похож на то, что вы хотите. Он возвращает фактическое имя пользователя, но группирует все те, которые являются просто цифрами вместе. Просто замените столбец имени пользователя, возвращенный в случае, если вы хотите вместо этого увидеть GRP_OTHERS
.
Это немного лучше not to use the mon
format model в Oracle, поскольку это не обязательно, согласовано между языками. Вместо этого используйте mm
.
Поскольку вы используете 9i, вы можете использовать перевод вместо этого. Заменить регулярных выражений с:
trim(translate(username,'',' ')) is null
Это заменяет номера ничего, а затем проверяет, есть ли что-нибудь осталось ...
Что вы пытаетесь сделать здесь. Случай в группе ??? –
Вы связываетесь с тем, чтобы ставить имя пользователя в реестр ex в одном групповом отдыхе, там имя пользователя? –
@ejb_guy см. Здесь: http://stackoverflow.com/questions/10763043/sql-how-to-group-by-with-a-special-condition –