powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Диапазон значений
10 сообщений из 10, страница 1 из 1
Диапазон значений
    #39202443
alexanoid1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица cards

У каждой записи(карты) есть целочисленный card_drop_rate, например:

id|name|card_drop_rate
-------------------------
1|card1|15
2|card2|10
3|card3|24

В данном случае максимальный drop_rate является 15 + 10 + 24 = 49

Согласно моей задаче мне необходимо выбирать случайным образом число от 0 до в данном случае 49 и затем возвращать карту диапазон которой соотвествует этому числу.

Пример:

случайное число: 41

card1 range: 0 - 15(0 + 15)
card2 range: 15 - 25(15 + 10)
card3 range: 25 - 49(25+ 24)

должна возвратиться карта card3 так как 41 принадлежит ее диапазону 25-49

Как лучше всего средствами PostgreSQL решить такую задачу и отобразить эту структуру в RDBMS ? Главным критерием для меня является производительность.
...
Рейтинг: 0 / 0
Диапазон значений
    #39202451
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexanoid1, если схематично, то как-то так:

Код: sql
1.
2.
select * from <table> where card_drop_rate <= <случайное число>
order by card_drop_rate desc limit 1
...
Рейтинг: 0 / 0
Диапазон значений
    #39202456
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Анна,

а, пардон, немного не то...
тут же накопительный итог и lead/lag нужен
...
Рейтинг: 0 / 0
Диапазон значений
    #39202458
alexanoid1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щукина Анна,

да, в этом основная сложность
...
Рейтинг: 0 / 0
Диапазон значений
    #39202463
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexanoid1,

Сумму нарастающим итогом подсчитайте сначала в столбце через sum() over(), а потом уж выбирайте
...
Рейтинг: 0 / 0
Диапазон значений
    #39202474
alexanoid1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
westvovik,

буду благодарен за пример. К сожалению раньше с Постгресом дела не имел и сейчас плаваю во всем (
...
Рейтинг: 0 / 0
Диапазон значений
    #39202479
alexanoid1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
westvovik,

пока что застрял с запросом след вида:

Код: sql
1.
select id, card_drop_rate, SUM(card_drop_rate) OVER(PARTITION BY id) as num from cards 



Вот как num превратить в две колонки с min и max диапазона для данного рядка ?
...
Рейтинг: 0 / 0
Диапазон значений
    #39202486
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
SELECT
b.id,
b.name,
b.card_drop_rate
FROM (SELECT a.id, a.name, sum(a.card_drop_rate) OVER(ORDER BY id)-a.card_drop_rate as rate, card_drop_rate FROM a) b
WHERE b.rate < 41 ORDER BY id DESC LIMIT 1

alexanoid1,

Ну как то так
...
Рейтинг: 0 / 0
Диапазон значений
    #39202499
alexanoid1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
westvovik,

Спасибо большое ! Это именно то что мне было нужно.
...
Рейтинг: 0 / 0
Диапазон значений
    #39203175
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexanoid1Как лучше всего средствами PostgreSQL решить такую задачу
Такую задачу лучше вообще не решать средствами PostgreSQL. От игрового сервера требуется быстродействие, а его так не достичь. Загружайте таблицу в ОЗУ и крутите данные там как хотите.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Диапазон значений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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