0

過去のエラーを取得できないように見えるクエリの支援を探しています。

2つのテーブルがあります。1つはインスタンスで、もう1つは運用グループです。各運用グループにはインスタンスが含まれているので、次のようになります。

Groups.(ID, Verified (Y/N))
Instances.(ID, source (A/B/C/D), status (X/Y/Z, groupid)

最初に行う必要があるのは、とのインスタンスを含むグループのみを分離することです。source=A次に、とのインスタンスの総数をカウントする必要がありsource != Aますstatus = Z

問題は、エラーを生成せずにサブクエリを配置する場所を特定できなかったことです。FROMにエイリアスのサブテーブルとして入れてみましたが、うまくいかなかったようです

これが私が思いついた基本的なクエリですが、機能していません。

SELECT COUNT(Instances.id)
FROM (
    SELECT Instances.id
    JOIN Groups ON Instances.groupid=Groups.id
    WHERE Groups.Verified='Y' AND Instances.source='A') AS a
WHERE Groups.Verified='Y' AND Instances.source!='A' AND Instances.status='Z';

どんな提案でも大歓迎です、ありがとう!私はSQLにまったく慣れておらず、正式なトレーニングを受けていませんが、現在定期的に使用する必要がある環境にいます。

4

1 に答える 1

0

このクエリは、少なくとも1つのインスタンスを持つすべてのグループのIDを提供しますsource = 'A'

SELECT DISTINCT(groupid) FROM Instances WHERE source = 'A'

これから構築してInstances、上記のグループの1つに属するレコードのみを考慮に入れて、再度クエリを実行する必要があります。

WHERE groupid IN (SELECT DISTINCT(groupid) FROM Instances WHERE source = 'A')
      AND source != 'A' AND status = 'Z'

GROUP BY groupidまた、このクエリが各グループの一致するインスタンスの数を個別に提供するようにする必要もあります。したがって、最終的なクエリは次のようになります

SELECT groupid, COUNT(*) AS instance_count FROM Instances
WHERE groupid IN (SELECT DISTINCT(groupid) FROM Instances WHERE source = 'A')
      AND source != 'A' AND status = 'Z'
GROUP BY groupid
于 2012-08-06T13:25:51.097 に答える