首页 > 解决方案 > 我想在不使用 DISTINCT 的情况下每个 subject_id 只显示一行。不知道该怎么做

问题描述

数据库的输出我正在处理大量数据,因此 DISTINCT 冻结了数据库

我已经在 pgAdmin 上尝试过 DISTINCT,到目前为止还没有运气。

SELECT p.subject_id,
    p.gender,
    p.dob,
    d.icd9_code, 
    pro.seq_num,
    pro.icd9_code,
    inpc.itemid inputevents,
    inp.itemid inputevents_mv,
    lab.itemid labevents,
    outp.itemid outputevents
FROM mimiciii.patients p

INNER JOIN mimiciii.diagnoses_icd d
    ON p.subject_id = d.subject_id
INNER JOIN mimiciii.procedures_icd pro
    ON p.subject_id = pro.subject_id
INNER JOIN mimiciii.labevents lab
    ON p.subject_id = lab.subject_id
INNER JOIN mimiciii.inputevents_cv inpc
    ON p.subject_id = inpc.subject_id
INNER JOIN mimiciii.inputevents_mv inp
    ON p.subject_id = inp.subject_id
INNER JOIN mimiciii.outputevents outp
    ON p.subject_id = outp.subject_id
WHERE d.icd9_code = '4299'

我不断收到 subject_id 的重复值。

标签: sqlpostgresql

解决方案


输出是正确的,因为对于相同的“subject_id”,您有许多“labevents”。

如果你想得到所有这些数据,你总是会得到多行。

如果您只需要“患者”数据,则可以使用子查询(例如 EXISTS)来获取正确的过滤器。

有的这样...

SELECT [p...] from patients p where exists (select 1 from ... where p.subject_id=d.subject_id )

=]


推荐阅读