【问题标题】:How to add the count from one query into another query如何将一个查询的计数添加到另一个查询中
【发布时间】:2022-08-17 11:39:22
【问题描述】:

我的第一个查询如下所示:

SELECT location, COUNT(*) as sections
FROM section
GROUP BY location

这给了我:

    标签: sql oracle


    【解决方案1】:

    只需加入查询:

    SELECT *
    FROM
    (
      SELECT location, COUNT(*) as sections
      FROM section
      GROUP BY location
    )
    FULL OUTER JOIN
    (
      SELECT s.location, COUNT(*) as students
      FROM enrollment e 
      INNER JOIN section s ON s.section_id = e.section_id
      GROUP BY s.location
    ) USING (location)
    ORDER BY location;
    

    另一种选择是按部分对注册进行分组,然后按位置加入和分组。

    SELECT
      location,
      COUNT(*) as sections,
      SUM(students_in_section) AS students
    FROM section s
    LEFT JOIN
    (
      SELECT section_id, COUNT(*) as students_in_section
      FROM enrollment
      GROUP BY section_id
    ) e ON e.section_id = s.section_id
    GROUP BY s.location
    ORDER BY s.location;
    

    另一种选择是加入表格并计算不同的部分和不同的注册。

    SELECT
      location,
      COUNT(DISTINCT s.section_id) as sections,
      COUNT(DISTINCT e.enrollment_id) AS students
    FROM section s
    LEFT JOIN enrollment e ON e.section_id = s.section_id
    GROUP BY s.location
    ORDER BY s.location;
    

    【讨论】:

    • 计算每个表的不同 rowid 将提供更准确的结果,独立于数据模型和每个表的主键标识
    • @astentx:这是一个很好的建议。
    • ...但应注意,它仅对普通表有效
    【解决方案2】:

    您可以使用COUNT(DISTINCT ...) 计算每个位置的唯一部分

      SELECT location, COUNT (DISTINCT s.section_id) AS sections, COUNT (*) AS students
        FROM enrollment e INNER JOIN section s ON s.section_id = e.section_id
    GROUP BY location
    

    【讨论】:

    • 这不是相同的结果。它只会计算注册中存在的部分。结合这两个查询将给出一个位置中所有部分的计数,无论它们在注册中的表示如何
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2020-09-10
    • 2014-08-18
    相关资源
    最近更新 更多