oracle中指定相等行数
Specified number of equal rows in oracle
我正在使用 oracle 开发一个医学数据库,我试图在其中找到随机匹配的样本。我为所有患者创建了一个 table,然后为患有我正在寻找的疾病的患者创建了一个 table。现在我想知道是否有可能将 3 名随机选择的患者准确匹配到我的目标组(因此来自目标组的每个患者从 table 中随机选择 3 名患者与所有患者)进行比较基于性别和出生年份。
SELECT A.PATIENTID
FROM ALLPATIENTS A,
DIAGNOSES B
WHERE A.YEAROFBIRTH = B.YEAROFBIRTH
AND A.GENDER = B.GENDER
AND A.PATIENTID NOT IN (SELECT PATIENTID
FROM DIAGNOSES);
我的查询显示了在诊断组中匹配的所有患者。这意味着来自出生年份更常见的诊断组的患者人数过多。这就是为什么我只想为我的诊断组中的每位患者提供 3 个样本。我希望你能明白我在说什么
非常感谢
您可以通过在分析中使用权重来解决问题。然而,这不是你的问题。这是获取三个随机选择的行的方法:
select *
from (select d.PATIENTID, p.PATIENTID,
ROW_NUMBER() OVER (PARTITION BY d.PATIENTID ORDER BY dbms_random.value) as seqnum
from ALLPATIENTS p join
DIAGNOSES d
where p.YEAROFBIRTH = d.YEAROFBIRTH AND
p.GENDER = d.GENDER AND
p.PATIENTID NOT IN (select d2.PATIENTID from DIAGNOSES d2)
) dp
where seqnum <= 3;
这会枚举所有匹配的行,然后随机选择三个。注意:这是 with 替换,因此一名患者可以出现在多个队列中。 没有 替换更具挑战性,但有可能。
我正在使用 oracle 开发一个医学数据库,我试图在其中找到随机匹配的样本。我为所有患者创建了一个 table,然后为患有我正在寻找的疾病的患者创建了一个 table。现在我想知道是否有可能将 3 名随机选择的患者准确匹配到我的目标组(因此来自目标组的每个患者从 table 中随机选择 3 名患者与所有患者)进行比较基于性别和出生年份。
SELECT A.PATIENTID
FROM ALLPATIENTS A,
DIAGNOSES B
WHERE A.YEAROFBIRTH = B.YEAROFBIRTH
AND A.GENDER = B.GENDER
AND A.PATIENTID NOT IN (SELECT PATIENTID
FROM DIAGNOSES);
我的查询显示了在诊断组中匹配的所有患者。这意味着来自出生年份更常见的诊断组的患者人数过多。这就是为什么我只想为我的诊断组中的每位患者提供 3 个样本。我希望你能明白我在说什么
非常感谢
您可以通过在分析中使用权重来解决问题。然而,这不是你的问题。这是获取三个随机选择的行的方法:
select *
from (select d.PATIENTID, p.PATIENTID,
ROW_NUMBER() OVER (PARTITION BY d.PATIENTID ORDER BY dbms_random.value) as seqnum
from ALLPATIENTS p join
DIAGNOSES d
where p.YEAROFBIRTH = d.YEAROFBIRTH AND
p.GENDER = d.GENDER AND
p.PATIENTID NOT IN (select d2.PATIENTID from DIAGNOSES d2)
) dp
where seqnum <= 3;
这会枚举所有匹配的行,然后随机选择三个。注意:这是 with 替换,因此一名患者可以出现在多个队列中。 没有 替换更具挑战性,但有可能。