Выборка записей случайным образом

MapInfo, MapBasic
Ответить
romir
Участник
Сообщения: 67
Зарегистрирован: 27 ноя 2009, 14:09
Репутация: 0

Выборка записей случайным образом

Сообщение romir » 29 дек 2016, 09:57

Подскажите, пожалуйста, как выбрать случайным образом 100 записей (точечных объектов) из таблицы?

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: Выборка записей случайным образом

Сообщение Игорь Белов » 29 дек 2016, 10:58

Один из способов:
  1. в окне MapBasic ввести команду Randomize
  2. изменить структуру таблицы: добавить колонку Rand типа Float
  3. заполнить колонку Rand значениями rnd(1)
  4. сделать выборку с сортировкой по полю Rand
  5. сохранить копию выборки в новую таблицу
  6. открыть новую таблицу
  7. сделать выборку из новой таблицы по условию RowID <= 100
The purpose of computing is insight, not numbers

romir
Участник
Сообщения: 67
Зарегистрирован: 27 ноя 2009, 14:09
Репутация: 0

Re: Выборка записей случайным образом

Сообщение romir » 29 дек 2016, 12:01

А через запрос как-нибудь можно?

romir
Участник
Сообщения: 67
Зарегистрирован: 27 ноя 2009, 14:09
Репутация: 0

Re: Выборка записей случайным образом

Сообщение romir » 29 дек 2016, 15:00

Спасибо. Все работает и желаемое достигается :)

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Выборка записей случайным образом

Сообщение Boris » 29 дек 2016, 20:38

romir писал(а):А через запрос как-нибудь можно?
можно, но только через ДВА:

Код: Выделить всё

Select CAD_NUM,rnd(1)*1000 from KU_5033 order by 2 into Q001
Browse * From Q001
Select * from Q001 where rowid<=100 into Q002
Browse * From Q002
или, если данных много и можно предположить, что функция Rnd(1) даст равномерное распределение, то одним запросом можно получить приблизительно 100 записей:

Код: Выделить всё

Select CAD_NUM from KU_5033 where rnd(1)<(100/int(TableInfo("KU_5033",8))) into Q001
Browse * From Q001
На 85000 записей выборка дала от 99 до 103 записей.

romir
Участник
Сообщения: 67
Зарегистрирован: 27 ноя 2009, 14:09
Репутация: 0

Re: Выборка записей случайным образом

Сообщение romir » 30 дек 2016, 09:14

Спасибо!

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 17 гостей