【发布时间】:2021-01-04 22:29:04
【问题描述】:
假设我在 Oracle 中有这个 SQL:
select field1,field2 from table where field2 in (32,421,5766) and .....
它通常会返回很多行。 如何从 field2 定义的每个组中选择 3 个随机行 ONE 并匹配其余条件
【问题讨论】:
标签: sql oracle random greatest-n-per-group
假设我在 Oracle 中有这个 SQL:
select field1,field2 from table where field2 in (32,421,5766) and .....
它通常会返回很多行。 如何从 field2 定义的每个组中选择 3 个随机行 ONE 并匹配其余条件
【问题讨论】:
标签: sql oracle random greatest-n-per-group
使用ROW_NUMBER 分析函数并给行随机排序:
SELECT field1,
field2
FROM (
SELECT field1,
field2,
ROW_NUMBER() OVER ( PARTITION BY field2 ORDER BY DBMS_RANDOM.VALUE() )
AS rn
FROM table_name
WHERE field2 IN (32, 421, 5766)
)
WHERE rn = 1;
其中,对于样本数据:
CREATE TABLE table_name ( field1, field2 ) AS
SELECT LEVEL, 1 FROM DUAL CONNECT BY LEVEL <= 10 UNION ALL
SELECT LEVEL, 32 FROM DUAL CONNECT BY LEVEL <= 10 UNION ALL
SELECT LEVEL, 421 FROM DUAL CONNECT BY LEVEL <= 10 UNION ALL
SELECT LEVEL, 5766 FROM DUAL CONNECT BY LEVEL <= 10;
可能(随机)输出:
字段1 | FIELD2 -----: | -----: 3 | 32 6 | 421 7 | 5766
db小提琴here
【讨论】: