在子查詢中選擇10個類別和10個隨機數。
按類別劃分優先級。
SELECT TOP 10 BookTitle, BookAuthor, BookCategory
FROM (
SELECT TOP 10 BookTitle, BookAuthor, BookCategory, 0 as prio
FROM TheTable
WHERE BookCategory LIKE 'Sale%')
UNION ALL
SELECT TOP 10 BookTitle, BookAuthor, BookCategory, 1 As prio
FROM TheTable
TABLESAMPLE (50 ROWS)
) x
ORDER BY prio
我從@ Remus的答案TABLESAMPLE
,因爲這顯然是與大表要快得多。爲他投票,如果這是你的主要特點。
然而,我調整它TABLESAMPLE (50 ROWS)
,因爲這warning in the manual的:
被返回可以顯著改變行的實際數量。如果 指定了一個小數字,例如5,則樣本中可能不會收到結果 。
我剛測試並轉載了這個。另外我還離開了TOP 10
,因爲我們最終只需要最多10個。
此外,manual adds a disclamer的「隨意性」:
如果你真的要各行的隨機抽樣,修改 查詢隨機篩選出的行,而不是使用TABLESAMPLE。
所以,如果真正的隨機選擇是一項要求,您的原始newid()
是正確的方法。
如果有11個出售,該怎麼辦?那麼你需要一個隨機的10個? –