SQL 查询嵌套 Select 语法

SQL Query Nested Select Syntax

我正在尝试创建一个查询,为我提供每个 OfficeID 的代理总数 (AgentID)。如果有人可以指导我正确的方向,如果有资源可以为您提供一堆对未来有用的不同类型查询的示例!

我现在的问题是语法。我不确定需要去哪里才能获得上述所需的输出。

这是我目前拥有的:

表格 OFFICE 和 AGENT:

CREATE TABLE OFFICE
(
     OfficeID NVARCHAR(5) UNIQUE,
     OfficeAddress NVARCHAR(18) NOT NULL,
     PRIMARY KEY(OfficeID)
)
GO

CREATE TABLE AGENT
(
     AgentID NVARCHAR(8) UNIQUE,
     OfficeID NVARCHAR(5) NOT NULL,
     AgentType NVARCHAR(9) NOT NULL,
     AgentFName NVARCHAR(10) NOT NULL,
     PRIMARY KEY (AgentId),
     FOREIGN KEY (OfficeID) REFERENCES OFFICE
             ON DELETE CASCADE
             ON UPDATE CASCADE
)
GO

查询:

SELECT
    OFFICE.OfficeID
FROM 
    OFFICE,
    (SELECT COUNT(AgentID)
     FROM AGENT, OFFICE 
     WHERE OFFICE.OfficeID = AGENT.OfficeID
     GROUP BY AGENT.OfficeID) 
ORDER BY 
    OFFICE.OfficeID

类似这样的事情(您想要的输出似乎缺失):

SELECT O.OfficeID
  , (
    SELECT COUNT(*)
    FROM AGENT A
    WHERE A.OfficeID = O.OfficeID
)
FROM OFFICE O
ORDER BY O.OfficeID

请注意使用 table 别名,这是让您的查询简洁的推荐做法。

我会用 JOIN 和 GROUP BY 来做到这一点,不需要或不需要嵌套:

SELECT o.OfficeID, COUNT(a.AgentID) NumberOfAgents
FROM Office o
LEFT JOIN Agents a ON a.OfficeID = o.OfficeID
GROUP BY o.OfficeID

您需要根据我认为您的情况不需要复杂的查询来具体说明您想要的内容。例如,您可以从以下查询中获得所需的输出

select officeid, count(1) as NoofAgents
from Agents 
group by officeid

SQL可以在很多方面给你想要的方式,你可以根据优化方案选择它们。