Oracle聚合函数返回一组随机值?
标准 SQL 聚合函数 max()
将返回组中的最高值; min()
将返回最低值。
Oracle中是否有聚合函数可以从组中返回随机值?或者某种技术来实现这一目标?
例如,给定表 foo
:
group_id value
1 1
1 5
1 9
2 2
2 4
2 8
SQL 查询
select group_id, max(value), min(value), some_aggregate_random_func(value)
from foo
group by group_id;
可能会生成:
group_id max(value), min(value), some_aggregate_random_func(value)
1 9 1 1
2 8 2 4
显然,最后一列是该组中的任何随机值。
The standard SQL aggregate function max()
will return the highest value in a group; min()
will return the lowest.
Is there an aggregate function in Oracle to return a random value from a group? Or some technique to achieve this?
E.g., given the table foo
:
group_id value
1 1
1 5
1 9
2 2
2 4
2 8
The SQL query
select group_id, max(value), min(value), some_aggregate_random_func(value)
from foo
group by group_id;
might produce:
group_id max(value), min(value), some_aggregate_random_func(value)
1 9 1 1
2 8 2 4
with, obviously, the last column being any random value in that group.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以尝试类似以下的方法。
想法是按随机顺序对组内的值进行排序并选择第一个。我可以想到其他方法,但没有那么有效。
You can try something like the following
The idea is to sort the values within group in random order and pick the first.I can think of other ways but none so efficient.
您可以在要从中提取随机元素的列前面添加一个随机字符串,然后选择该列的 min() 元素并取出前面添加的字符串。
通过这种方式,您可以避免使用聚合函数并指定两次分组依据,这在查询非常复杂/或者您只是探索数据并手动输入带有冗长且不断变化的列表的查询的情况下可能很有用。按列分组。
You might prepend a random string to the column you want to extract the random element from, and then select the min() element of the column and take out the prepended string.
In this way you cand avoid using the aggregate function and specifying twice the group by, which might be useful in a scenario where your query is very complicated / or you are just exploring the data and are entering manually queries with a lengthy and changing list of group by columns.