0

我正在寻求有关我似乎无法解决错误的查询的帮助。

我有两张表,一张是实例,一张是操作组。每个操作组都包含实例,所以我有:

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

此查询为您提供至少有一个实例的所有组的 ID source = 'A'

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

以此为基础,您需要再次查询Instances,只考虑属于上述组之一的那些记录

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 回答