内部联接两个选择语句SQL

时间:2017-09-07 03:25:58

标签: database

假设我有一张表,上面有学生的姓名和成绩。我想创建一个查询,告诉我,对于每个学生,他的成绩中有多少百分比高于75.不同的学生可能会进行不同数量的测试。

例如:

  1. Joe 49
  2. Joe 80
  3. Joe 100
  4. Bob 90
  5. Bob 100
  6. Bob 95
  7. Bob 91
  8. Sam 74
  9. Sam 76
  10. 会返回

    1. Joe 0.67
    2. Bob 1.0
    3. Sam 0.5

4 个答案:

答案 0 :(得分:0)

这听起来像是家庭作业,你需要自己解决。也许你需要首先看看如何将这个问题分解为几个步骤。例如:

  • 1)写一个查询来返回你的第一组数据(你可能有 已经这样了)并计算每个学生完成了多少次测试
  • 2) 写一个查询并计算每个学生完成的测试数量 超过阈值(75)
  • 3)编写一个加入的查询 上述查询的结果并为您提供所需的输出

最后一步是加入的地方

答案 1 :(得分:0)

试试这个。

Select  studentName
,Round(Count(grade) /sum(case when grade>75 then 1 else 0 End),2) as persentage 
from studentsTable 
group by studentName

答案 2 :(得分:0)

假设您的架构是:

user_grades
username: varchar(255)
grade: int

然后我会做这个查询

SELECT 
    user_grades.username, 
    round(grades_above.total / user_grades.total,2) percent_above 
FROM (
    SELECT username, count(*) total FROM user_grades GROUP BY 1
)  user_grades
INNER JOIN (SELECT username, count(*) total FROM user_grades WHERE grade > 75 
GROUP BY 1) grades_above ON user_grades.username = grades_above.username

可能有多种方法可以做到这一点,但是用两个select语句和一个内连接完成了。我认为示例结果是错误的,但这是我期望看到的。

username    percent_above
Bob         1.00
Joe         0.67
Sam         0.50

但是,请确保您了解正在发生的事情,如果您有任何疑问,请与我们联系。你理解如何得到答案比答案本身更重要。

答案 3 :(得分:0)

试一试

SELECT name,
COUNT(*) AS over_75
FROM student
WHERE grade > 75
GROUP BY name;