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可以在很多方面给你想要的方式,你可以根据优化方案选择它们。
我正在尝试创建一个查询,为我提供每个 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可以在很多方面给你想要的方式,你可以根据优化方案选择它们。