【发布时间】:2022-08-17 11:39:22
【问题描述】:
我的第一个查询如下所示:
SELECT location, COUNT(*) as sections
FROM section
GROUP BY location
这给了我:
我的第一个查询如下所示:
SELECT location, COUNT(*) as sections
FROM section
GROUP BY location
这给了我:
只需加入查询:
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;
【讨论】:
您可以使用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
【讨论】: