SQL – 在联合查询中仅计算一个表的条目

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

我有一个连接查询

 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,时间全部发生b.batiment = a.batiment.我有一个实际出现的b.maxten>表中有10个,但是b.batiment = a.batiment的231个出现(表格设置得很糟糕,不是我的选择;这些表被认为只读给我),所以它返回231个计数.

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

UPDATE
这就是我到目前为止所做的事情……

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值.没有batiment表tblBatiment没有办法做到这一点:batiment,nom_batim我知道这是最好的方式,但我没有访问权限.

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

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

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

点赞