如何查找按某项分组的条目数并仅检索高于平均水平的条目?

How to find number of entries grouped by something and retrieve only those above average?

我有两个 table:配置文件和记录。在 Profile 中,我有学生姓名和其他信息,而在 Record 中,我有包含课程信息的行。在记录 table 中,一个学生可以有很多行。我需要计算按 student_name 分组的行数,但只检索那些行数多于平均值(rows/total 学生人数)的学生姓名。我可以找到按 student_name 分组的行数,但我无法编写子查询来仅显示高于平均水平的行数。有人可以给我解释一下方法吗?

这是我目前拥有的:

SELECT student_name, COUNT(*)
  FROM Profile p 
  JOIN Record r
    ON p._id = r._id
 GROUP BY student_name

所需的输出只是检索具有上述平均编号的 students_name。记录中的行数 table:

student_name No. of Records
Ali 556
John 244

您确实可以使用 sub-query 来获得您想要的输出。

代码:

SELECT student, COUNT(*) AS no_of_records  
FROM record
GROUP BY student
HAVING no_of_records > (SELECT COUNT(*)/COUNT(DISTINCT student) FROM record);

解释:

  • 此处的 sub-query 将 return 来自记录 table
  • 的平均行数
  • outer-query中,我们正在计算每个学生的行数并将其与sub-query的结果
  • 进行比较

注意:如果需要,您可以在外部查询中使用配置文件 table 加入它。

看看fiddle更好理解