powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Есть ли смысл исключать из под суммирования нулевые поля?
25 сообщений из 53, страница 1 из 3
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525889
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть большая таблица, порядка 300M записей.
Нужно по этой таблице применить группировку и сортировку:
Код: plsql
1.
2.
3.
4.
select client_id, sum(cost) as cost
from ...
where moment between :date1 and :date2
group by client_id


В таблице есть индексы по client_id и moment. Но нет индексов по cost.
При этом в попадающих под выборку записях более 90% записей нулевые (т.е. cost=0).
Есть ли смысл добавлять в условие where выражение and cost!=0 ?
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525893
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.и сортировку
Имелось ввиду «и суммирование».
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525895
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Есть ли смысл добавлять в условие where выражение and cost!=0 ?Логика запроса поменяется.

Alibek B.В таблице есть индекс по client_id и moment. Но нет индексов по cost.Не думал об использовании индекса по дате? Ну и про between с датами уже много раз говорили.
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525908
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

есть разница
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SQL> select job,sum(comm) from emp where 1=1 group by job;

JOB        SUM(COMM)
--------- ----------
CLERK
SALESMAN        2200
PRESIDENT
MANAGER
ANALYST

SQL> select job,sum(comm) from emp where 1=1 and comm is not null group by job;

JOB        SUM(COMM)
--------- ----------
SALESMAN        2200

SQL>

SQL> select deptno,sum(comm) from emp where 1=1 group by deptno having sum(comm) is not null;

    DEPTNO  SUM(COMM)
---------- ----------
        30       2200

SQL>



.....
stax
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525911
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

уважаемый, зачем "1=1" ?
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525913
=nomad=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я ничего не понял из комментариев: ТС говорит про cost, которое или 0, или другое число. При чем тут null? Да и moment - это поле date и по нему и так есть индекс.
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525914
=nomad=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--Stax,
уважаемый, зачем "1=1" ?
Привык к продуктам Oracle (OEBS)?
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525927
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.В таблице есть индексы по client_id и moment. Но нет индексов по cost.
При этом в попадающих под выборку записях более 90% записей нулевые (т.е. cost=0).
Есть ли смысл добавлять в условие where выражение and cost!=0 ?

А что будет с остальными 10% записями?
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525939
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно эти 10% и нужно просуммировать.
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525946
Alibek B.Собственно эти 10% и нужно просуммировать.Зато по 90% сумма известна заранее. Быстрее всего будет взять общую сумму и вычесть сумму 90% нулей, выраженную константой 0.
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525947
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadЛогика запроса поменяется.
Результат не поменяется.

AmKadНе думал об использовании индекса по дате?
По полю moment есть индекс.

AmKadНу и про between с датами уже много раз говорили.
Что именно?
Если то, что он включает в себя границы, я это знаю.
Если есть какие-то другие нюансы, но в настоящем запроса moment >= :date1 and moment < :date2
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525949
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxесть разница
В поле cost нет значений null.
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525951
Alibek B., мы посовещались и решили, что ты попробуешь разные запросы, сравнишь скорости выполнения и напишешь свое экспертное мнение, как в итоге оказалось лучше.
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525968
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Staxесть разница
В поле cost нет значений null.
с 0, тоже будет другой результат, если все cost для клиента 0

если неважно, можно добавить в условие where
імхо
сравнение с 0 все-таки дешевле суммирования с 0, но стоит ли усложнять логику запроса, хз

.....
stax
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525988
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxс 0, тоже будет другой результат, если все cost для клиента 0
Про этот случай не подумал.
Но у меня этот запрос не конечный, а промежуточный, далее мне нужно будет обработать ненулевые агрегаты.
Так что для моего случая этот момент особой роли не играет.

Staxсравнение с 0 все-таки дешевле суммирования с 0, но стоит ли усложнять логику запроса, хз
Да, я именно это имел ввиду.
После такой формулировки ответ напрашивается сам.
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525989
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Staxсравнение с 0 все-таки дешевле суммирования с 0, но стоит ли усложнять логику запроса, хзДа, я именно это имел ввиду.
После такой формулировки ответ напрашивается сам.Напрашивается, что ты лох, верящий на слово добрым, но недалёким самаритянам.
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525990
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логика и РазумAlibek B., мы посовещались и решили, что ты попробуешь разные запросы, сравнишь скорости выполнения и напишешь свое экспертное мнение, как в итоге оказалось лучше.
Допустим мне нужно проверить работоспособность амперметра. И я вначале было подумал спросить на форуме электриков, как его нужно подключить — последовательно или параллельно.
Но потом логика и разум сказали мне, что лучше поэкспериментировать самому и потом отписаться о результатах.
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525996
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Допустим мне нужно проверить работоспособность амперметра. И я вначале было подумал спросить на форуме электриков, как его нужно подключить — последовательно или параллельно.
Но потом логика и разум сказали мне, что лучше поэкспериментировать самому и потом отписаться о результатах.Ты, дурочило, зря ёрничаешь.
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39525999
Alibek B.поэкспериментировать самому и потом отписаться о результатах.Это потом наступит, только когда из морга выпишут.
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39526023
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так создай FBI:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create index index_name
  on table_name(
                case cost
                  when 0 then null
                  else moment
                end,
                case cost
                  when 0 then null
                  else client_id
                end,
                case cost
                  when 0 then null
                  else cost
                end
               )
/



И измени свой select на:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
select  case cost
          when 0 then null
          else client_id
        end client_id,
        sum(case cost
              when 0 then null
              else cost
            end
           ) as cost
  from  table_name
  where case cost
          when 0 then null
          else moment
        end between :date1 and :date2
    and case cost
          when 0 then null
          else client_id
        end is not null
    and case cost
          when 0 then null
          else cost
        end is not null
  group by case cost
             when 0 then null
             else client_id
           end
/



SY.
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39526028
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadAlibek B.В таблице есть индекс по client_id и moment. Но нет индексов по cost.
Не думал об использовании индекса по дате? Ну и про between с датами уже много раз говорили.
что говорили?
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39526032
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78что говорили?О том, что в общем случае date - это дата со временем, и для фильтрации диапазона лучше использовать другое условие.
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39526040
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс - мой SELECT не вернет клиентoв c SUM(COST) = 0. Так что будет равнозначно только если у каждого клиента за любой интервал moment есть как минимум одна запись с cost != 0, что маловероятно.

SY.
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39526043
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadtip78что говорили?О том, что в общем случае date - это дата со временем, и для фильтрации диапазона лучше использовать другое условие.

это элементарно лечится:
Код: sql
1.
added BETWEEN '2017-07-01 00:00:00' AND '2017-09-31 23:59:59'


а если там именно date, то и без минут будет пофиг
...
Рейтинг: 0 / 0
Есть ли смысл исключать из под суммирования нулевые поля?
    #39526045
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78а если там именно date, то и без минут будет пофиг

Особенно когда получишь:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> select 1 from dual where sysdate BETWEEN '2017-07-01 00:00:00' AND '2017-09-31 23:59:59'
  2  /
select 1 from dual where sysdate BETWEEN '2017-07-01 00:00:00' AND '2017-09-31 23:59:59'
                                                                   *
ERROR at line 1:
ORA-01861: literal does not match format string


SQL>



cтрока != дата, да и в сентябре 30 дней.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> select 1 from dual where sysdate BETWEEN TO_DATE('2017-07-01 00:00:00','YYYY-MM-DD HH24:MI:SS') AND TO_DATE('2017-09-30 23:59:59','YYYY-MM-DD HH24:MI:SS')
  2  /

         1
----------
         1

SQL>



SY.
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Есть ли смысл исключать из под суммирования нулевые поля?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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