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

Откуда:
Сообщений: 80
В базе данных 400 записей. Вопросник - 4 темы с вопросами и ответами. как отсортировать по темам, чтобы в каждой теме было по 7 случайных вопросов?
23 апр 13, 17:18    [14220181]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка со случайным выбором  [new]
qwerty112
Guest
avicena
В базе данных 400 записей. Вопросник - 4 темы с вопросами и ответами. как отсортировать по темам, чтобы в каждой теме было по 7 случайных вопросов?

а тем сколько всего в таб. ?

если 4-е и есть, то так, как-то вроде ...
select top 1 with ties *
from T
order by (row_number()over(partition by тема order by newid())-1) / 7
23 апр 13, 17:28    [14220250]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка со случайным выбором  [new]
avicena
Member

Откуда:
Сообщений: 80
qwerty112, Пишет - ошибка выполнения SQL
23 апр 13, 17:41    [14220355]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка со случайным выбором  [new]
Glory
Member

Откуда:
Сообщений: 104751
avicena
Пишет - ошибка выполнения SQL

Вы уверены, что у вас Microsoft SQL server версии не ниже 2005 ?
23 апр 13, 17:44    [14220373]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка со случайным выбором  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
CREATE TABLE #Themes ([theme] Varchar(10) ,[question] Varchar(10)) 


INSERT INTO #Themes SELECT '1' ,'t1q1'
INSERT INTO #Themes SELECT '1' ,'t1q2'
INSERT INTO #Themes SELECT '1' ,'t1q3'
INSERT INTO #Themes SELECT '1' ,'t1q4'
INSERT INTO #Themes SELECT '1' ,'t1q5'


INSERT INTO #Themes SELECT '2' ,'t2q1'
INSERT INTO #Themes SELECT '2' ,'t2q2'
INSERT INTO #Themes SELECT '2' ,'t2q3'
INSERT INTO #Themes SELECT '2' ,'t2q4'
INSERT INTO #Themes SELECT '2' ,'t2q5'

SELECT  [theme],[question] FROM 
( SELECT [R] = NTILE(3) OVER (PARTITION BY [theme] ORDER BY NEWID() ),[theme], [question] FROM  #Themes ) X
WHERE R = 1 
ORDER BY [theme]
23 апр 13, 17:56    [14220482]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка со случайным выбором  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Упс, фигню написал

прошу прощения =(
23 апр 13, 17:58    [14220500]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка со случайным выбором  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Вот так не фигня
CREATE TABLE #Themes ([theme] Varchar(10) ,[question] Varchar(10)) 


INSERT INTO #Themes SELECT '1' ,'t1q1'
INSERT INTO #Themes SELECT '1' ,'t1q2'
INSERT INTO #Themes SELECT '1' ,'t1q3'
INSERT INTO #Themes SELECT '1' ,'t1q4'
INSERT INTO #Themes SELECT '1' ,'t1q5'


INSERT INTO #Themes SELECT '2' ,'t2q1'
INSERT INTO #Themes SELECT '2' ,'t2q2'
INSERT INTO #Themes SELECT '2' ,'t2q3'
INSERT INTO #Themes SELECT '2' ,'t2q4'
INSERT INTO #Themes SELECT '2' ,'t2q5'

SELECT  [theme],[question] FROM 
( SELECT [R] = ROW_NUMBER() OVER (PARTITION BY [theme] ORDER BY NEWID() ),[theme], [question] FROM  #Themes ) X
WHERE R <= 7
ORDER BY [theme]



Мне казалос энтайл режет на куски заданного размера, а он режет на заданное кол-во кусков =( А вот с роунамбером ок
23 апр 13, 18:03    [14220538]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка со случайным выбором  [new]
avicena
Member

Откуда:
Сообщений: 80
Прошу прощенья - Microsoft SQL Server Compact 4.0
23 апр 13, 23:22    [14221515]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка со случайным выбором  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Ну тогда частным решением будет вот такая эквилибристика.
Более-менее терпимо, если тем мало и мы знаем их идентификаторы. Если тем будет не 4, а 104, то крутиться надо будет по другому.

IF OBJECT_ID('tempdb..#Themes') > 0 DROP TABLE #Themes
CREATE TABLE #Themes (theme Varchar(10) ,question Varchar(10)) 


INSERT INTO #Themes SELECT '1' ,'t1q1'
INSERT INTO #Themes SELECT '1' ,'t1q2'
INSERT INTO #Themes SELECT '1' ,'t1q3'
INSERT INTO #Themes SELECT '1' ,'t1q4'
INSERT INTO #Themes SELECT '1' ,'t1q5'


INSERT INTO #Themes SELECT '2' ,'t2q1'
INSERT INTO #Themes SELECT '2' ,'t2q2'
INSERT INTO #Themes SELECT '2' ,'t2q3'
INSERT INTO #Themes SELECT '2' ,'t2q4'
INSERT INTO #Themes SELECT '2' ,'t2q5'

 
 
 IF OBJECT_ID('tempdb..#T1') > 0 DROP TABLE #T1
 IF OBJECT_ID('tempdb..#T2') > 0 DROP TABLE #T2

 SELECT TOP 2 T.theme,T.question INTO #T1 FROM #Themes AS T  WHERE T.theme = '1' ORDER BY NEWID()
 SELECT TOP 2 T.theme,T.question INTO #T2 FROM #Themes AS T  WHERE T.theme = '2'  ORDER BY NEWID() 
 
 SELECT * FROM #T1
 UNION ALL 
 SELECT * FROM #T2
24 апр 13, 01:21    [14221831]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка со случайным выбором  [new]
aleks2
Guest
Cammomile
Ну тогда частным решением будет вот такая эквилибристика.
Более-менее терпимо, если тем мало и мы знаем их идентификаторы. Если тем будет не 4, а 104, то крутиться надо будет по другому.


Блин, ну откуда такие неучи лезут?

1. Канешно, "400 записей" позволяют делать "через жопу".
2. Но зачем свои извращенные привычки прививать молодежи?
3. НЕ НАДО нумеровать ВСЕ записи каждый раз. Это глупо и затратно.
4. Надо пронумеровать ВСЕ записи ОДИН раз.
5. Надо сгенерировать нужное число случайных номеров - "7 случайных вопросов". Семь - это вам не 400.
6. И выбрать.
24 апр 13, 07:46    [14221931]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка со случайным выбором  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Ну может господин д'Артаньян соизволит представить рабочий код? Потому, как за яростными брызгами слюны идею не очень-то видно.

Спасибо за понимание.
24 апр 13, 10:30    [14222363]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка со случайным выбором  [new]
aleks2
Guest
Cammomile
Ну может господин д'Артаньян соизволит представить рабочий код? Потому, как за яростными брызгами слюны идею не очень-то видно.

Спасибо за понимание.

Зачем тебе код? Тебе учиться надо.

https://www.sql.ru/forum/actualthread.aspx?tid=1015482&hl=rand
30 апр 13, 11:32    [14248322]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить