sql - 选择 50% 的行。在列中的文本之间均匀分割
问题描述
假设我有一个名为 tblOrder 的下表(我包括 20 行,但包含更多):我想创建一个选择查询,它将返回一半的行(选择前 50%),但随机将行分布在 a、b 之间,c和d。所以在这种情况下,它将返回 2 和 a,2 和 b,2 和 c 和 2 和 d - 剩下的 2 将是 1 a 和 1 b
解决方案
如果你想要一个真正随机的样本,你可以使用:
select o.*
from (select o.*,
ntile(2) over (order by newid()) as tile
from tblOrder o
) o
where tile = 2;
如果你想要一个分层样本,它试图保持四个值的原始分布,你可以使用:
select o.*
from (select o.*,
ntile(2) over (partition by col2 order by newid()) as tile
from tblOrder o
) o
where tile = 1;
推荐阅读
- node.js - node.js 中用于数据库插入的 Redis 队列
- android - 在 Android 中使用 websocat 连接到 WSS
- ios - 如何在故事板/笔尖中查找 Xcode 中特定颜色的对象
- docker - 使用挂载的卷将目录从 Docker 容器复制到主机
- geotools - Geotools 依赖版本组合
- c# - 使用WhenAny处理每个任务的异常
- java - alicebot 包中的“MagicBooleans”、“MagicStrings”是什么?
- php - 与爆炸变量 Yii2 之间
- php - PHP PDO 准备好的语句 - 无法插入布尔值 false
- java - 找不到符号 - 但变量在那里