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


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

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

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

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


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


Спасибо!
...
Рейтинг: 0 / 0
26.10.2021, 17:00
    #40107100
SY
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
26.10.2021, 17:09
    #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
26.10.2021, 20:15
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Количество по условию / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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