如何查找按某项分组的条目数并仅检索高于平均水平的条目?
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更好理解
我有两个 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更好理解