powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите разобраться с аналитической выборкой
7 сообщений из 7, страница 1 из 1
помогите разобраться с аналитической выборкой
    #39275322
swatch.exe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть таблица комнат, распределенных по этажам
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

необходимо вывести список этажей и для каждого этажа количество комнат с включенным светом на этажах ниже текущего, включая текущий.
...
Рейтинг: 0 / 0
помогите разобраться с аналитической выборкой
    #39275324
swatch.exe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начала писать вот так
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 этажа выдавал только последнюю строку не пойму
...
Рейтинг: 0 / 0
помогите разобраться с аналитической выборкой
    #39275327
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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.
...
Рейтинг: 0 / 0
помогите разобраться с аналитической выборкой
    #39275328
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swatch.exeROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

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

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

SY.
...
Рейтинг: 0 / 0
помогите разобраться с аналитической выборкой
    #39275629
swatch.exe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY, спасибо! пошла медитировать:)
...
Рейтинг: 0 / 0
помогите разобраться с аналитической выборкой
    #39275971
Фотография JaRo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Код: plsql
1.
2.
                   sum(light) over(order by floor) cnt,
                   lag(floor,1,-999) over(order by floor) prev_floor

Чисто теоретически интересно, а есть ли возможность вынудить Ораклу в ситуации с одинаковым окном строить окно именно дважды? Ну то бишь чисто теортически тут сортировка напрашивалась бы для гарантии floor, room, но в случае с одинаковыми окнами это получается паранойя или всё-таки можно как-то звёзды сложить не так? )
...
Рейтинг: 0 / 0
помогите разобраться с аналитической выборкой
    #39275972
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaRoНу то бишь чисто теортически тут сортировка напрашивалась бы для гарантии floor, room, но в случае с одинаковыми окнами это получается паранойя или всё-таки можно как-то звёзды сложить не так? )

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

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


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