我继承了两个查询来提取不同角色代码的患者总数,问题是,它们返回相同的数字 - 我现在知道 DISTINCT 正在产生这个,因为表如下所述,但不确定如何向查询添加其他条件以进行隔离:
查询 1(理论上结果应该更小
SELECT count(DISTINCT p.patient)
FROM react r
INNER JOIN CasesR cr
ON cr.globalid = r.globalid
LEFT JOIN profile p
ON cr.globalid = p.globalid
WHERE r.desc = 'A'
AND cr.rcode = 'PS'
查询 1(理论上结果应该大得多)
SELECT count(DISTINCT p.patient)
FROM react r
INNER JOIN CasesR cr
ON cr.globalid = r.globalid
LEFT JOIN profile p
ON cr.globalid = p.globalid
WHERE r.desc = 'A'
react 关键字段
rrecordid (PK)
globalid (Multiples in table IE: rrecordid=1,globalid=122; rrecordid=2,globalid=333)
desc (Multiples in table IE: rrecordid=1,globalid=122; rrecordid=2,globalid=333)
CasesR 关键字段
crecordid (PK)
globalid
(Multiples in table IE: crecordid=1,globalid=122;crecordid=2,globalid=333)
rcode (enum: 'A','B','C','D')
(multiples, globalid=122;rcode=A; globalid=122;rcode=B)
配置文件关键字段
globalid (PK)
patient (Multiples in table IE: globalid=1,patient=122;globalid=2,patient=122)
那么如何更改此查询以获得真实计数?
谢谢
最佳答案
将上述评论的内容汇总起来。 . .您的查询是给您真实的计数。您的第一个查询(使用 AND cr.rcode = 'PS'
)意味着:
Find all
profile
records that (1) have a corresponding record inreact
withdesc = 'A'
and (2) have a corresponding record incasesr
withrcode = 'PS'
. How many distinct values are there for thoseprofile
records'patient
fields?
你的第二个查询(没有 AND cr.rcode = 'PS'
)意味着同样的事情,除了限制 #2 从“在 casesr
中有一个对应的记录和 rcode = 'PS'
”更改为“在 casesr
中有一个对应的记录”。自然地,由于这是一个更宽松的限制,它永远不会产生一个较小的值;但它肯定会产生相同的值。
你说你继承了这些查询;您确定编写它们的人实际上并不打算它们通常会给出相同的结果吗?也许 patient
满足第二个查询的所有要求而不满足第一个的轻微额外要求是相当不寻常的。
关于mysql - MySQL DISTINCT(COUNT) 如何针对不同条件返回相同数量的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9843566/