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 > 10TIMES回カウントしていますb.batiment = a.batiment。テーブルには実際に が 1 回出現b.maxten > 10していますが、b.batiment = a.batiment が 231 回出現しています (テーブルの設定が不適切であり、私の選択ではありません。これらのテーブルは読み取り専用と見なされます)。 231。

ID フィールドのユーザーフレンドリーな表現としてCOUNT(b.maxten)正しく表示するにはどうすればよいですか? (は建物の長い名前です # )a.nom_batimbatimenta.nom_batimbatiment

更新
これは私がこれまでやったことです..

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 の値しか必要としない場合、リソースを浪費しているように見えますが、個別のbatiment値のみを選択して 5000 以上の行すべてを照会する必要があります。batimentテーブルを持たずにこれを行う方法はありませんtblBatiment: batiment, nom_batimか?それが最善の方法であることはわかっていますが、アクセスできません。

4

5 に答える 5

1

サブクエリでカウントを実行できるため、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 テーブルに ID 列がある場合は、必要なものを取得できます。

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  

また、結合構文を正しい結合構文に置き換えました (「結合」キーワードを使用)。

于 2012-06-01T15:15:55.230 に答える
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 に答える
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

使用してみてください:

HAVING b.maxten>10
于 2012-06-01T13:19:53.583 に答える