我正在为我们的实验室编写一些SQL,除了我需要计算返回的DISTINCT数量的事实之外,我已经完成了所有这些操作。这是没有COUNT()的工作代码。它将三个表联系在一起。当我使用COUNT()函数时,我得到的结果不准确。我是否需要在SELECT中包含子查询?
SELECT
batchid,
s_sampleid,
requestid,
u_labinstance,
sdiworkitem.workitemid,
workitemdesc
FROM s_sample INNER JOIN (sdiworkitem INNER JOIN workitem ON sdiworkitem.workitemid = workitem.workitemid)
ON s_sample.s_sampleid = sdiworkitem.keyid1
GROUP BY
s_sampleid,
batchid,
requestid,
u_labinstance,
sdiworkitem.workitemid,
workitemdesc
更新(工作查询)
SELECT
batchid,
COUNT(DISTINCT s_sampleid),
s_sampleid,
requestid,
u_labinstance,
sdiworkitem.workitemid,
workitemdesc
FROM s_sample INNER JOIN (sdiworkitem INNER JOIN workitem ON sdiworkitem.workitemid = workitem.workitemid)
ON s_sample.s_sampleid = sdiworkitem.keyid1
GROUP BY
batchid,
requestid,
u_labinstance,
sdiworkitem.workitemid,
workitemdesc
答案 0 :(得分:1)
首先,从GROUP BY中取出s_sampleid
GROUP BY
batchid,
requestid,
u_labinstance,
sdiworkitem.workitemid,
workitemdesc
然后,尝试这两个
COUNT(DISTINCT s_sampleid)
COUNT(s_sampleid)
s_sampleid上的GROUP BY将始终给出“1”以进行修复,然后查看哪些COUNT是正确的。
编辑:
如果您需要实际的s_sampleid 和计数,那么您需要OVER子句并删除GROUP BY
COUNT(DISTINCT s_sampleid) OVER (PARTITION BY batchid,
requestid,
u_labinstance,
sdiworkitem.workitemid,
workitemdesc)
此应该工作...否则它是一个子查询
否则,你应该已经提到你希望值和在开始时计数
答案 1 :(得分:0)
正如其他人所提到的,使用DISTINCT
。
另外,您是指定某个字段还是使用COUNT(*)
? COUNT(*)
将统计所有现有行,COUNT(field)
将忽略指定字段的NULL
值。