4

这似乎是一件很平常的事情,但我似乎找不到如何去做。

我有一个连接查询

 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在表中有 1 次实际出现,但是 b.batiment = a.batiment 出现了 231 次(这些表设置不当,不是我的选择;这些表对我来说是只读的),因此它返回计数231.

如何正确显示ID 字段COUNT(b.maxten),但仍显示a.nom_batim为用户友好的表示形式?batimenta.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值。没有batiment桌子就没有办法做到这一点tblBatiment: batiment, nom_batim我知道这是最好的方法,但我没有访问权限。

4

5 回答 5

1

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

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

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

于 2012-06-01T13:18:49.877 回答
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”关键字)替换了您的连接语法。

于 2012-06-01T15:15:55.230 回答
0

尝试使用:

HAVING b.maxten>10
于 2012-06-01T13:19:53.583 回答
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
于 2012-06-01T13:20:55.483 回答
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

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

感谢其他回答。

于 2012-06-04T13:49:15.503 回答