使用COUNT()返回不准确

时间:2011-07-19 13:47:33

标签: sql

我正在为我们的实验室编写一些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

2 个答案:

答案 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值。