gpt4 book ai didi

SQL - 基于特定值从单独的表中计算列

转载 作者:行者123 更新时间:2023-12-04 08:40:53 24 4
gpt4 key购买 nike

我仍在学习 SQL,这是我作业的一部分。我不只是在寻找答案,而且我想了解如何解决这个问题,因为我什至不知道在线搜索什么。
在部分作业中,我们给出了一个问题和一个示例输出。我们必须将数据插入到我们创建的表中并编写一个 SQL 查询,该查询将返回回答问题的结果。
这个特定的问题类似于:
“对于每个办公室,显示其所在的郊区、经理的姓名、办公室的员工总数(不包括经理)以及待售房源的数量。”
涉及 3 个表(我删除了不必要的列):

  • 办公室 ( id , office_manager_id, office_suburb)
  • 员工 ( id , office_id)
  • 列表 ( id , office_id, staff_id,buyer_id)

  • 输出示例类似于:
    Office Suburb |  Manager  |  No. of Staff  |  No of Listing for Sale  |
    New York | Johnny | 2 | 5 |
    我想我可以用 COUNT 和 GROUP BY 来做到这一点,但是一旦我尝试加入 3 个表并使用 COUNT,行数就会变得疯狂,所以我的计数为“否”。工作人员”和“不。 Listing for Sale' 变得相同。
    如果我分别计算它们(仅使用 2 个表,例如 Office 和 Listing 或 Office 和 Staff),那么我可以获得所需的 COUNT 输出。
    这是我到目前为止得到的:
    SELECT 
    o.office_suburb AS "Office Suburb",
    (s.first_name || ' ' || s.last_name) AS "Manager",
    COUNT(s.salary)-1 AS "No. of Staff",
    COUNT(l.id) AS "No. of Listings for Sale"
    FROM staff s, office o, listing l
    WHERE o.id = s.office_id
    AND s.id = o.office_manager_id
    AND o.id = l.office_id
    AND s.id = l.staff_id
    AND l.buyer_id IS NULL
    GROUP BY o.office_suburb, s.first_name, s.last_name
    如果有人可以帮助我确定方向,我将不胜感激。我尝试搜索诸如“计算多个表”、“按 3 个表分组”等术语,但没有运气。即使您可以提供以下帮助:“只需搜索 xyz,这就是您所需要的”,我也会非常感激...
    谢谢你。
    PS:我们学习连接表的方法是使用WHERE子句,这就是为什么我的SQL使用WHERE而不是JOIN的原因。此外,这一切都在 Oracle ApEx 中完成。

    最佳答案

    我会推荐相关的子查询,但像这样:

    SELECT o.office_suburb, (sm.first_name || ' ' || sm.last_name) AS Manager,
    (SELECT COUNT(*)
    FROM staff s2
    WHERE s2.office_id = o.id
    ) as num_staff,
    (SELECT COUNT(*)
    FROM listings l
    WHERE l.office_id = o.id AND l.buyer_id IS NULL
    ) as num_listings
    FROM office o JOIN
    staff sm
    ON sm.id = o.office_manager_id ;
    注意使用适当的、明确的、 标准 , 可读 JOIN句法。另外, GROUP BY在外部查询中不需要。

    关于SQL - 基于特定值从单独的表中计算列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64572601/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com