这似乎是常规的事情,但我似乎无法找到如何做到这一点。
我有一个加入查询
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
值。如果没有batiment
表tblBatiment: batiment, nom_batim
,我们无法做到这一点我知道这是最好的方式,但我没有访问权限。
答案 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字段,但你可以做什么)。
感谢其他人回答。