
我有一個名為 userAnchor 的 uid 和 anchorUid 關系表,如上圖所示,現在我需要從該表中選擇一些資料;
- 選擇anchorUid=1的所有行,在這個例子中,是uid 1到10;
- 從第一步中的前15%的結果中隨機選擇1行,本例中uid的結果為1;
- 從第1步中間35%的結果中隨機選擇2行,在本例中,uid的結果將在2-5中隨機;
- 從第1步結果的后50%隨機選擇3行,在本例中,uid的結果將在6-10中隨機;
我的問題是我可以在一個 sql 中執行查詢嗎?
uj5u.com熱心網友回復:
WITH
cte1 AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY id) rn
FROM test
WHERE anchor_id = 1 ),
cte2 AS ( SELECT MAX(rn) cnt
FROM cte1 ),
cte3 AS ( SELECT id,
ROUND(cnt * percent_from / 100) 1 range_from,
ROUND(cnt * percent_till / 100) range_till
FROM cte2
CROSS JOIN percents ),
cte4 AS ( SELECT id, ROUND(range_from RAND() * (range_till - range_from)) random_id
FROM cte3)
SELECT cte1.id, cte1.uid, cte1.anchor_id
FROM cte4
JOIN cte1 ON cte4.random_id = cte1.rn;
DEMO對每個步驟進行了解釋。
解決方案未壓縮/優化。你可以自己做這件事。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/388645.html
