【问题标题】:SQL Counting Using Group By With Multiple Tables and Joins使用带有多个表和连接的 Group By 进行 SQL 计数
【发布时间】:2020-10-02 13:47:04
【问题描述】:

我有 3 个表(学校、学生、活动),例如:

学校

学生

活动

我想在 2020 ONLY 中获取每所学校的所有活动和参与者人数,如下表所示:

我做了一个这样的查询,但它没有按我的意愿工作:

SELECT Sc.SchoolName, A.ActivityName, Sc.Year COUNT(Gender)
FROM School Sc
JOIN Student S ON Sc.SchoolID=S.SchoolID
JOIN Activity A ON S.ActivityID=A.ActivityID
GROUP BY Gender

我该如何解决这个问题?你能给我解决办法吗?

【问题讨论】:

  • 首先,请学习如何正确使用GROUP BY。该查询甚至不会在几乎所有 dbms 系统中执行。

标签: sql join group-by count pivot


【解决方案1】:

你想要条件聚合:

SELECT 
    Sc.SchoolName, 
    A.ActivityName, 
    Sc.Year, 
    SUM(CASE WHEN S.Gender = 'F' THEN 1 ELSE 0 ENd) F,
    SUM(CASE WHEN S.Gender = 'M' THEN 1 ELSE 0 ENd) M
FROM School Sc
JOIN Student S  ON Sc.SchoolID  = S.SchoolID
JOIN Activity A ON S.ActivityID = A.ActivityID
GROUP BY 
    Sc.SchoolName, 
    A.ActivityName, 
    Sc.Year

【讨论】:

  • 它按照我想要的真实列显示表格,但我需要每行的 F 和 M 的总和。您的查询完全显示为 0
  • @Wicaledon:那么这意味着您在表StudentsGender 列中的值不是'F''M'...检查您的数据。
  • 我发现我遗漏了一些东西,所以对不起老兄,它工作得很好!非常感谢
【解决方案2】:

请使用以下查询,

SELECT Sc.SchoolName, Sc.Year, A.ActivityName,
      case when Sc.Gender = 'M' then count(1) end as M,
      case when Sc.Gender = 'F' then count(1) end as F
FROM School Sc
JOIN Student S ON Sc.SchoolID=S.SchoolID
JOIN Activity A ON S.ActivityID=A.ActivityID
GROUP BY Sc.SchoolName, Sc.Year, A.ActivityName;

【讨论】:

  • 它显示了一个错误Incorrect syntax near the keyword 'as'。我试图删除所有as 但现在逗号是错误的
  • 现在试试,忘了提end函数
【解决方案3】:
SELECT 
    Sc.SchoolName, 
    A.ActivityName, 
    Sc.Year, 
    COUNT(CASE WHEN S.Gender = 'F' THEN StudentID END) as F,
    COUNT(CASE WHEN S.Gender = 'M' THEN StudentID END) as M
FROM School Sc
INNER JOIN Student S  ON Sc.SchoolID  = S.SchoolID
INNER JOIN Activity A ON S.ActivityID = A.ActivityID
WHERE YEAR LIKE '2020-%'
GROUP BY 
    Sc.SchoolName, 
    A.ActivityName, 
    Sc.Year

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 2023-03-16
    • 2021-04-07
    相关资源
    最近更新 更多