假设有张新闻表,它存储了基本信息以及分类ID
ID | cagegory_id | title |
---|---|---|
1 | 1 | 一条SQL秀翻全场 |
2 | 2 | ddd |
3 | 2 | cccc |
4 | 2 | … |
……
现在需要根据每个分类的数据占比,比如A分类的文章在全部新闻中占 5%,B分类 3% …
然后根据这个百分比 随机查出数据
即得到的记录集 比如 20条,其中 A分类文章 1条(5%),B分类(3%) 没有或者取整 1 条 …
这个一条 Sql 可以实现?
以下 SQL
用 SQLite
测试通过:
WITH
data AS (
SELECT id, cume_dist() OVER win AS pct
FROM 新闻表
WINDOW win AS (PARTITION BY category_id ORDER BY random())
),
pick_ids AS (
SELECT id
FROM data
ORDER BY pct
LIMIT 20
)
SELECT title
FROM pick_ids
JOIN 新闻表 USING(id);
5 回答3.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
1 回答2.9k 阅读✓ 已解决