Имея предложение без Group by - PullRequest
1 голос
/ 05 мая 2020

Помогите, пожалуйста, разобраться в этой ситуации. Почему в документации и других ресурсах я могу найти информацию о том, что предложение HAVING нельзя использовать без GROUP BY? Потому что при тестировании в SQL Developer я могу использовать HAVING без GROUP BY. Кто может это прояснить? Заранее спасибо.

Пример:

    select sum(salary) from employees
having sum(salary)>0;

Я понимаю, что логически это ерунда. Но синтаксис позволял это делать. Я хочу сдать экзамен 1z0-071, и если я увижу связанный с этим вопрос, какой ответ должен быть правильным? Вот что меня смущает.

Извините, это моя ошибка. Потому что я уже нашел правильную информацию в документации. «Имея» можно использовать без «Группировать по», но это не рекомендуется. Неправильная информация о «Имеющих» и «Группировать по» отсутствует в документации. Ошибся и посмотрел на другом ресурсе.

Топи c можно закрывать. Спасибо всем за обмен знаниями.

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Ну да - работает:

SQL> select count(*) from emp having count(*) > 0;

  COUNT(*)
----------
        14

SQL> select count(*) from emp having count(*) > 20;

no rows selected

SQL>

Итак, это не ошибка , а своего рода сомнительный что вы будете использовать его для.

0 голосов
/ 05 мая 2020

Следующие два оператора логически одинаковы, поэтому я думаю, что вы не получаете сообщение об ошибке, если не используете group by. Здесь db_fiddle

Заявление 1 : -

        select count(1)
        from foo
        group by null
        having count(*) > 1;

Заявление2 : -

        select count(1)
        from foo
        having count(*) > 1;

В документации oracle говорится, что ниже, и нигде не упоминается, что having следует всегда by group by

Предложение HAVING

Используйте предложение HAVING, чтобы ограничить группы возвращаемых строк теми группами, для которых указанное условие истинно. Если вы опустите это предложение, база данных вернет итоговые строки для всех групп.

Укажите GROUP BY и HAVING после выражения where_clause иierarchical_query_clause. Если вы укажете как GROUP BY, так и HAVING, они могут появиться в любом порядке.

...