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

Откуда:
Сообщений: 2
Добрый день!
Есть такая задача: заполнить таблицу рандомно 0 или 1 в процентном соотношении 25 на 75, то есть в результате в таблице должно получиться 25% нулей и 75% единиц. Подскажите, пожалуйста, как такое можно реализовать.
7 июн 17, 15:50    [20547421]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
Rankatan
Member

Откуда:
Сообщений: 250
SELECT case when  ABS(CHECKSUM(NEWID()))%100 between 0 and 75 then 1 else 0 end
7 июн 17, 15:56    [20547465]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Rankatan
SELECT case when  ABS(CHECKSUM(NEWID()))%100 between 0 and 75 then 1 else 0 end

ты из той же секты которая день рождения раз в жизни празднует?

network_7
заполните всё 1, потом 25% 0 :)
7 июн 17, 15:58    [20547480]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
DROP TABLE #a
CREATE  TABLE #a
(
	Id INT,
	Rnd INT DEFAULT 0
)
INSERT INTO #a(Id)
SELECT ROW_NUMBER() OVER  (ORDER BY 1/0) FROM sysobjects

DECLARE @cnt INT = (SELECT COUNT(*)*25/100 FROM #a)

;WITH tp AS 
(
	SELECT TOP(@Cnt) Id, Rnd
	FROM #a a
	ORDER BY NEWID()
)
UPDATE tp
SET Rnd = 1
7 июн 17, 16:05    [20547513]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
зачем я процент высчитывал тоже не ясно...

SELECT TOP 25 PERCENT Id, Rnd FROM #a 	ORDER BY NEWID()
7 июн 17, 16:06    [20547520]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Тогда уж

;with t as (
SELECT TOP 25 PERCENT Rnd
FROM table
ORDER BY NEWID()
) 
update t
set Rnd=0
7 июн 17, 16:09    [20547533]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
Rankatan
Member

Откуда:
Сообщений: 250
TaPaK
ты из той же секты которая день рождения раз в жизни празднует?

network_7
заполните всё 1, потом 25% 0 :)


Твоя операция заполнения единицами всю таблицу, а потом еще 25% будет дороже стоить в плане ресурсов (но это имхо). Обоснование такое: лучше нагрузить CPU чем HDD.
7 июн 17, 16:16    [20547563]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Rankatan
TaPaK
ты из той же секты которая день рождения раз в жизни празднует?

network_7
заполните всё 1, потом 25% 0 :)


Твоя операция заполнения единицами всю таблицу, а потом еще 25% будет дороже стоить в плане ресурсов (но это имхо). Обоснование такое: лучше нагрузить CPU чем HDD.

благо ваше решение говно :)
7 июн 17, 16:19    [20547572]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
Rankatan
Member

Откуда:
Сообщений: 250
TaPaK
Rankatan
пропущено...


Твоя операция заполнения единицами всю таблицу, а потом еще 25% будет дороже стоить в плане ресурсов (но это имхо). Обоснование такое: лучше нагрузить CPU чем HDD.

благо ваше решение говно :)

Обосновать слабо?
7 июн 17, 16:21    [20547577]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Rankatan
TaPaK
пропущено...

благо ваше решение говно :)

Обосновать слабо?

не унижайтесь
7 июн 17, 16:24    [20547588]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
Rankatan
Member

Откуда:
Сообщений: 250
TaPaK
Rankatan
пропущено...

Обосновать слабо?

не унижайтесь

Пу, я слышу пока только звон.
7 июн 17, 16:25    [20547591]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Rankatan,

для упёртых в ворота
оно ничего не делает, для начала
SELECT case when  ABS(CHECKSUM(NEWID()))%100 between 0 and 75 then 1 else 0 end
7 июн 17, 16:27    [20547597]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
network_7
Member

Откуда:
Сообщений: 2
TaPaK, спасибо, Ваше решение помогло)
7 июн 17, 16:28    [20547599]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
Rankatan
Member

Откуда:
Сообщений: 250
TaPaK
Rankatan,

для упёртых в ворота
оно ничего не делает, для начала
SELECT case when  ABS(CHECKSUM(NEWID()))%100 between 0 and 75 then 1 else 0 end


Update t
set clm=case when  ABS(CHECKSUM(NEWID()))%100 between 0 and 75 then 1 else 0 end


Теперь делает, что дальше?
7 июн 17, 16:29    [20547612]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7762
WTF

;with t as (
SELECT TOP 25 PERCENT Rnd
FROM table
ORDER BY NEWID()
) 
update t
set Rnd=0


Just
1. Создать колонку с дефолтными нулями.
2.
update top (25) percent dbo.Table1 set f1 = 1
7 июн 17, 16:47    [20547709]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
Remind
Member

Откуда: UK
Сообщений: 523
Rankatan
Update t
set clm=case when  ABS(CHECKSUM(NEWID()))%100 between 0 and 75 then 1 else 0 end


Теперь делает, что дальше?

Данное решение не гарантирует распределение 75/25
7 июн 17, 16:56    [20547780]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владислав Колосов
WTF

;with t as (
SELECT TOP 25 PERCENT Rnd
FROM table
ORDER BY NEWID()
) 
update t
set Rnd=0


Just
1. Создать колонку с дефолтными нулями.
2.
update top (25) percent dbo.Table1 set f1 = 1

да, но update top (25) percent не совсем случайные 25%, по этому подзапрос с сортировкой
7 июн 17, 17:08    [20547846]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Remind
Rankatan
Update t
set clm=case when  ABS(CHECKSUM(NEWID()))%100 between 0 and 75 then 1 else 0 end


Теперь делает, что дальше?

Данное решение не гарантирует распределение 75/25

Будет +- но близко. Для подобных задач как раз подобное нужно (ИМХО), а не CONST 25%
7 июн 17, 17:09    [20547853]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7762
TaPaK,

я ждал замечание насчет случайного распределения, но отношение - это куча, в ней вообще нет закономерности. То есть она по умолчанию случайна. Плотность распределения определяется исключительно порядком сортировки при выборке данных.

По большому счету, если речь идет о вероятности, то при выборке каждой строки 0 и 1 должны рассчитываться согласно требуемому распределению, а не быть фиксировано определены для каждой записи.
7 июн 17, 17:49    [20548007]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7762
Например, при проведении 100 экспериментов 75 раз выпала 1 и 25 раз 0. В каком порядке должно происходить выпадение 1 - теория вероятности не говорит.
7 июн 17, 17:52    [20548014]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел с процентном соотношении  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владислав Колосов
TaPaK,

я ждал замечание насчет случайного распределения, но отношение - это куча, в ней вообще нет закономерности. То есть она по умолчанию случайна. Плотность распределения определяется исключительно порядком сортировки при выборке данных.

По большому счету, если речь идет о вероятности, то при выборке каждой строки 0 и 1 должны рассчитываться согласно требуемому распределению, а не быть фиксировано определены для каждой записи.

действительно, задачу вообще не верно поставили, надо было измените первые 25% строк на 1
7 июн 17, 17:57    [20548025]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить