我正在寻找有关查询的帮助,我似乎无法解决错误。
我有两个表,一个实例和一个操作组。每个操作组都包含实例,所以我有:
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很陌生,并且没有接受过正式的培训,但是现在我需要经常使用它。
答案 0 :(得分:0)
此查询为您提供至少包含一个source = 'A'
个实例的所有组的ID:
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