powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Количество по условию
8 сообщений из 8, страница 1 из 1
Количество по условию
    #40107053
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Сейчас, для подсчета количества по условию, использую конструкцию:
Код: plsql
1.
COUNT(CASE WHEN field = :Param THEN 1 END)


Как-то можна упростить эту конструкцию?
...
Рейтинг: 0 / 0
Количество по условию
    #40107055
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, не могу

А чем не угодило
Код: plsql
1.
select count(*) from ... where field = :Param
...
Рейтинг: 0 / 0
Количество по условию
    #40107060
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров
Не, не могу

А чем не угодило
Код: plsql
1.
select count(*) from ... where field = :Param

:)
Для where есть совершенно другие условия и это "field = :Param" неприемлемо.
...
Рейтинг: 0 / 0
Количество по условию
    #40107068
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
Добрый день!
Сейчас, для подсчета количества по условию, использую конструкцию:
Код: plsql
1.
COUNT(CASE WHEN field = :Param THEN 1 END)


Как-то можна упростить эту конструкцию?
Код: plsql
1.
count(decode(field, :Param, 1))
...
Рейтинг: 0 / 0
Количество по условию
    #40107096
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmKad
Код: plsql
1.
count(decode(field, :Param, 1))


Спасибо!
...
Рейтинг: 0 / 0
Количество по условию
    #40107100
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW

Для where есть совершенно другие условия и это "field = :Param" неприемлемо.


И чем-же это неприемлемо?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> select count(case when job = 'CLERK' then 1 end) from emp where deptno = 20 and sal > 1000;

COUNT(CASEWHENJOB='CLERK'THEN1END)
----------------------------------
                                 1

SQL> select count(*) from emp where deptno = 20 and sal > 1000 and job = 'CLERK';

  COUNT(*)
----------
         1

SQL>



SY.
...
Рейтинг: 0 / 0
Количество по условию
    #40107105
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
AmKad
Код: plsql
1.
count(decode(field, :Param, 1))


Спасибо!

В общем случае, не эквивалентная замена: https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/DECODE.html#GUID-39341D91-3442-4730-BD34-D3CF5D4701CE
авторIn a DECODE function, Oracle considers two nulls to be equivalent. If expr is null, then Oracle returns the result of the first search that is also null.
Возможно, добавят когда-нибудь Filter clause for aggregate functions (есть в PostgreSQL, например), если идея наберет достаточно голосов.
...
Рейтинг: 0 / 0
Количество по условию
    #40107146
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY

И чем-же это неприемлемо?
SY.

Потому, что мне нужно в т.ч. и COUNT(*) и другие значения job != 'CLERK'
Код: plsql
1.
select count(*), count(case when job = 'CLERK' then 1 end) from emp where deptno = 20 and sal > 1000;
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Количество по условию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]