【问题标题】:Specified number of equal rows in oracleoracle中指定的相等行数
【发布时间】:2015-02-28 21:57:29
【问题描述】:

我正在使用 oracle 开发一个医学数据库,我试图在其中找到随机匹配的样本。我创建了一个包含所有患者的表格,然后创建了一个包含我正在寻找的疾病的患者的表格。现在我想知道是否可以根据性别和出生年份进行比较,将 3 名随机选择的患者与我的目标组完全匹配(因此目标组中的每个患者从表中随机选择 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 个样本。我希望你能明白我在说什么

非常感谢

【问题讨论】:

  • 最后一个 where 条件让我很困惑,“A.PATIENTID NOT IN (select PATIENTID from DIAGNOSES)”是什么意思?
  • @jarlh 。 . . S/he 表示治疗组 (diagnoses) 中的患者不能在任何队列中。即diagnosesallpatients 是分开的,但allpatients 拥有所有人。
  • 感谢您的解释! (估计过完年还是很累……)

标签: sql oracle


【解决方案1】:

您可以通过在分析中使用权重来解决问题。但是,这不是你的问题。这是一种获取三个随机选择的行的方法:

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 替换,因此患者可以出现在多个队列中。 没有替换更具挑战性,但也是可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多