如何在SQL或Snowflake中按随机选取的ID值筛选对应行
在Snowflake或SQL中随机选取一个ID并获取其所有行的实现方法
以下是几种简洁高效的实现方式,适用于Snowflake及大多数SQL方言:
方法1:子查询直接匹配
先从所有唯一ID中随机选取一个,再筛选原表中对应ID的所有行:
SELECT * FROM your_table WHERE ID = (SELECT DISTINCT ID FROM your_table ORDER BY RANDOM() LIMIT 1);
注:不同SQL方言的随机函数略有差异:Snowflake用
RANDOM(),MySQL用RAND(),SQL Server用NEWID()(配合排序)。
方法2:CTE关联查询
用公共表表达式(CTE)先提取随机ID,再关联原表,可读性更强:
WITH random_selected_id AS ( SELECT DISTINCT ID FROM your_table ORDER BY RANDOM() LIMIT 1 ) SELECT t.* FROM your_table t JOIN random_selected_id r ON t.ID = r.ID;
方法3:Snowflake高效采样法(大表推荐)
如果表数据量很大,用Snowflake的SAMPLE语法可以更快获取随机ID,避免排序所有唯一ID的开销:
SELECT * FROM your_table WHERE ID = (SELECT ID FROM your_table SAMPLE ROW (1) LIMIT 1);
注:
SAMPLE ROW (1)会随机抽取一行,取其ID后匹配所有同ID的行,性能优于排序法。
内容的提问来源于stack exchange,提问作者HuckleberryFinn
相关产品推荐
相关产品推荐

