SQL - 在连接查询中仅计算一个表条目

时间:2012-06-01 13:15:10

标签: sql ms-access count aggregate

这似乎是常规的事情,但我似乎无法找到如何做到这一点。

我有一个加入查询

 SELECT a.nom_batim, COUNT(b.maxten) AS NumFaulty
 FROM tblTrials AS b, tblRooms AS a
 WHERE b.batiment = a.batiment
 AND b.maxten > 10
 GROUP BY a.nom_batim
 ORDER BY a.nom_batim

应该只返回tblTrials条目的计数。但是,由于我不知道如何对其进行编码,因此它正在计算b.maxten > 10的所有出现次数,TIMES的所有出现都是b.batiment = a.batiment。我在表中实际出现了b.maxten > 10,但是有两次b.batiment = a.batiment(这些表设置得很糟糕,不是我选择的;这些表对我来说是只读的),所以它返回231的计数。

我如何COUNT(b.maxten)正确,但仍然显示a.nom_batim作为batiment ID字段的用户友好表示? (a.nom_batim是建筑物的长名称#batiment

更新
这就是我到目前为止所做的事情。

SELECT a.nom_batim, COUNT(b.batiment) AS NumFaulty
FROM (SELECT DISTINCT nom_batim, batiment FROM tblRooms) AS a
INNER JOIN tblTrials AS b ON a.batiment = b.batiment
WHERE b.maxten > 10
GROUP BY a.nom_batim
ORDER BY a.nom_batim

当我只需要来自tblRooms的最多~30个值时,它可以工作,但看起来像资源需要,但必须查询所有5000多行,只选择不同的batiment值。如果没有batimenttblBatiment: batiment, nom_batim,我们无法做到这一点我知道这是最好的方式,但我没有访问权限。

5 个答案:

答案 0 :(得分:1)

您可以在子查询中执行计数,因此它仅适用于一个表的记录:

SELECT ..
FROM (SELECT batiment, COUNT(maxten) FROM tblTrials WHERE maxten > 10) AS b
    ,tblRooms AS a
...

否则,计数将应用于最终结果中的所有记录,因为查询引擎不会区分来自COUNT中某个地方的记录。

答案 1 :(得分:1)

回到原始查询,如果您在tblTrials表上有一个标识列,则可以获得所需内容:

SELECT a.nom_batim, COUNT(distinct b.id) AS NumFaulty
FROM tblTrials b INNER JOIN tblRooms a   
     ON b.batiment = a.batiment
WHERE b.maxten > 10
GROUP BY a.nom_batim
ORDER BY a.nom_batim  

我还使用正确的连接语法(使用“join”关键字)替换了连接语法。

答案 2 :(得分:0)

尝试使用:

HAVING b.maxten>10

答案 3 :(得分:0)

试试这个:

 SELECT a.nom_batim, COUNT(b.maxten) AS NumFaulty
 FROM tblTrials AS b, tblRooms AS a
 WHERE b.batiment = a.batiment
 GROUP BY a.nom_batim
 HAVING count(b.maxten) > 10
 ORDER BY a.nom_batim

答案 4 :(得分:0)

迄今为止我能做的最好的事情是:

SELECT a.nom_batim AS Building, Count(q.batiment) AS Fixes
FROM (SELECT DISTINCT nom_batim, batiment FROM tblRooms)  AS a 
INNER JOIN tblTrials AS q 
ON a.batiment = q.batiment
WHERE q.maxten > 10
GROUP BY a.nom_batim

似乎SELECT DISTINCT nom_batim, batiment FROM tblRooms会很慢,因为tblTrials可能包含60k条目,而tblRooms可能包含10k条目..但条目尚未输入,所以我无法真正测试它。戈登提出了一个很好的观点,如果它返回相同的东西,它可能是相同的速度。我确实有多字段主键,所以它也可能有助于解决问题(可能不是ID字段,但你可以做什么)。

感谢其他人回答。