从
my_table
与列a
,b
,c
,d
和e
我想随机选择N
行,这样列a
,b
和的组合c
是独一无二的。
我试着和一群人一起解决这个问题:
select a, b, c, min(d), min(e) from my_table
group by a, b, c
这种方法行不通,因为它不会从
my_table
返回实际存在的行,因为列d
和e
的最小值可以在不同的行中。此外,min
不是一个合适的函数,因为它不返回随机行。
我怎样才能实现它?
我正在使用基于 Presto 构建并运行标准 ANSI SQL 的 amazon athena。
我没有安装 Presto,只有 Trino(但 Athena 引擎 v3 应该基于 Trino),在 Trino 中,您可以尝试使用
min_by
/max_by
函数将它们与 random
结合起来用于“订购”和一些ROW
魔法:
select a, b, c,
min_by((d, e), random()).* as (d, e)
from my_table
group by a, b, c
row_number
窗口函数并再次使用 random
进行排序:
select a, b, c, d, e
from(
select *,
row_number() over(partition by a, b, c order by random()) rn
from dataset)
where rn = 1
你没有告诉你正在使用哪个DBMS,所以不可能给出完整的解决方案。
但策略是