sql - 随机选择每组的一个不同的行?
问题描述
假设我在 Oracle 中有这个 SQL:
select field1,field2 from table where field2 in (32,421,5766) and .....
它通常会返回很多行。如何从 field2 定义的每个组中选择 3 个随机行 ONE 并匹配其余条件
解决方案
使用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<>在这里摆弄
推荐阅读
- git - git - 子模块 - 结帐银行而不是哈希
- postgresql - 如何使用可为空的列创建复合 UNIQUE 约束?
- search - Solr 不允许搜索自由文本(语义搜索)
- reactjs - GraphQL Apollo 查询客户端:轮询间隔不适用于 TypeScript
- angular - 如何在订阅中测试二传手?有角度的
- python - EML 文件作为附件没有在 Python 中使用 IMAP 下载?
- c# - 如何在 Blazor/ASP 应用程序中唯一标识 Active Directory 来宾用户
- flutter - Flutter Web 响应式设计字体
- ubuntu - Gitlab EE - LDAP 身份验证给出空列表
- react-native - 使用 React Native 连接到 Stitch