С таблицей Words
, подобной этой, с одним словом со словом для каждой строки
create table Words
(
Word varchar(25) primary key,
Freq int not null
)
вы можете получить случайное слово, используя order by newid()
.
select top 1 Word
from Words
order by newid()
.Столбец частоты - это int
, где каждое слово имеет по крайней мере 1, а слова, которые чаще встречаются, имеют более высокие значения.Чтобы использовать order by newid()
, мы должны создать таблицу, которая содержит дубликаты для слов, которые имеют более высокое значение freq.Это можно сделать с помощью таблицы подсчета .
Чтобы отслеживать слова, которые вы уже выбрали, у вас может быть другая таблица.
create table PickedWords
(
Word varchar(25) primary key
)
Это ваше утверждениечтобы добавить выбранное слово в таблицу PickedWords
и использовать выражение output
для возврата слова клиенту.
insert into PickedWords
output inserted.Word
select top 1 W.Word
from Words as W
inner join tsqlc_Tally as T
on W.Freq > T.N
where W.Word not in (select Word
from PickedWords)
order by newid()
На действительно печальном ноутбуке с процессором с частотой 1,2 ГГц за 1000 раз требуется 9 секунд.000 слов.
Если вместо столбца частоты вместо вас есть таблица с уже дублированными словами, поэтому мы можем пропустить таблицу подсчета, то для выбора одного слова потребуется 2 секунды.