Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 помогите разобраться с аналитической выборкой  [new]
swatch.exe
Member

Откуда:
Сообщений: 21
есть таблица комнат, распределенных по этажам
create table ROOMS
(
room NUMBER,
floor NUMBER,
light VARCHAR2(1) --признак, включен свет (=1) или выключен (=0)
)

есть данные вида
room floor light
101 1 0
102 1 0
103 1 1
201 2 0
202 2 0
301 3 1
302 3 1

необходимо вывести список этажей и для каждого этажа количество комнат с включенным светом на этажах ниже текущего, включая текущий.
18 июл 16, 00:55    [19421394]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с аналитической выборкой  [new]
swatch.exe
Member

Откуда:
Сообщений: 21
Начала писать вот так
select floor, count(1) over(order by floor ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ct from rooms
where light_is_on=1

но возвращает соответственно
floor count
1 1
3 2
3 3

А как сделать, чтоб для 3 этажа выдавал только последнюю строку не пойму
18 июл 16, 01:08    [19421401]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с аналитической выборкой  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
with t as (
           select  floor,
                   sum(light) over(order by floor) cnt,
                   lag(floor,1,-999) over(order by floor) prev_floor
             from  rooms
          )
select  floor,
        cnt
  from  t
  where floor != prev_floor
  order by floor
/

     FLOOR        CNT
---------- ----------
         1          1
         2          1
         3          3

SQL>


SY.

Сообщение было отредактировано: 18 июл 16, 01:42
18 июл 16, 01:33    [19421426]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с аналитической выборкой  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
swatch.exe
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW


Медитируй над:

1. разницей между ROWS BETWEEN и RANGE BETWEEN.
2. к чему может привести(и приводит) where light_is_on=1

SY.

Сообщение было отредактировано: 18 июл 16, 01:40
18 июл 16, 01:35    [19421431]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с аналитической выборкой  [new]
swatch.exe
Member

Откуда:
Сообщений: 21
SY, спасибо! пошла медитировать:)
18 июл 16, 14:13    [19423150]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с аналитической выборкой  [new]
JaRo
Member

Откуда:
Сообщений: 1659
SY
                   sum(light) over(order by floor) cnt,
                   lag(floor,1,-999) over(order by floor) prev_floor
Чисто теоретически интересно, а есть ли возможность вынудить Ораклу в ситуации с одинаковым окном строить окно именно дважды? Ну то бишь чисто теортически тут сортировка напрашивалась бы для гарантии floor, room, но в случае с одинаковыми окнами это получается паранойя или всё-таки можно как-то звёзды сложить не так? )
19 июл 16, 00:50    [19425377]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с аналитической выборкой  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
JaRo
Ну то бишь чисто теортически тут сортировка напрашивалась бы для гарантии floor, room, но в случае с одинаковыми окнами это получается паранойя или всё-таки можно как-то звёзды сложить не так? )


Tы тожe пoмедитируй над разницей между ROWS BETWEEN и RANGE BETWEEN.

SY.
19 июл 16, 01:02    [19425390]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить