【问题标题】:SQL Query Nested Select SyntaxSQL 查询嵌套选择语法
【发布时间】:2019-05-06 13:55:24
【问题描述】:

我正在尝试创建一个查询,为我提供每个 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

【问题讨论】:

标签: sql-server nested-query


【解决方案1】:

类似这样的东西(您想要的输出似乎丢失了):

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

注意表别名的使用,这是保持查询简洁的推荐做法。

【讨论】:

    【解决方案2】:

    我会使用 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
    

    【讨论】:

      【解决方案3】:

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

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

      SQL 可以通过多种方式为您提供所需的方式,您可以根据优化的解决方案进行选择。

      【讨论】:

      • 我在发布答案之前确实考虑了这一点,但我决定保留加入以防办公室没有代理,而 OP 可能仍希望得到 0 结果。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-23
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 2013-01-19
      相关资源
      最近更新 更多