понедельник, 18 марта 2013 г.

Как отсортировать в случайном порядке

-- Как произвести сортировку набора на основе выражения
-- Требуется отсортировать строки в случайном порядке. Например, вопросы для экзамена, победителей для лотереи, образцы для проверки

-- Мы отсортируем список людей

SELECT 
    FirstName, LastName, BusinessEntityID
FROM AdventureWorks2012.Person.Person

-- Попробуем отсортировать функцией RAND(). Она возвращает дробное псевдослучайное значение от 0 до 1.


SELECT 
    FirstName, LastName, BusinessEntityID
FROM AdventureWorks2012.Person.Person
ORDER BY RAND() -- Добавили

-- Не получится. RAND() возвращает для всех строк одинаковое значение.
-- Возьмем функцию NEWID(). Она создает уникальное значение GUID - Глобально уникальный идентификатор.

SELECT 
    FirstName, LastName, BusinessEntityID
FROM AdventureWorks2012.Person.Person
ORDER BY NEWID() -- Поменяли

--При каждом вызове, порядок в наборе разный
-- Как выбрать одного победителя

SELECT TOP(1) -- Добавили
    FirstName, LastName, BusinessEntityID
FROM AdventureWorks2012.Person.Person
ORDER BY NEWID()

-- Как получить выборку из 10 строк

SELECT TOP(10) -- Поменяли
    FirstName, LastName, BusinessEntityID
FROM AdventureWorks2012.Person.Person
ORDER BY NEWID()


-- Как получить выборку из 1% строк

SELECT TOP(1) PERCENT -- Поменяли
    FirstName, LastName, BusinessEntityID
FROM AdventureWorks2012.Person.Person
ORDER BY NEWID()