当前位置: 首页 > 知识库问答 >
问题:

编写一个SQL查询来报告学生(student_id,student_name)在所有考试中都“安静”

羊昊苍
2023-03-14

——一个“相当”的学生,就是至少参加了一门考试,既没得高分也没得低分的人。

- 编写SQL查询以报告学生(student_id,student_name)在所有考试中“安静”。

- 不要退回从未参加过任何考试的学生。返回按student_id排序的结果表。

-- 查询结果格式如以下示例所示。

学生桌:

-- +-------------+---------------+
-- | student_id  | student_name  |
-- +-------------+---------------+
-- | 1           | Daniel        |
-- | 2           | Jade          |
-- | 3           | Stella        |
-- | 4           | Jonathan      |
-- | 5           | Will          |
-- +-------------+---------------+

考试表:

-- +------------+--------------+-----------+
-- | exam_id    | student_id   | score     |
-- +------------+--------------+-----------+
-- | 10         |     1        |    70     |
-- | 10         |     2        |    80     |
-- | 10         |     3        |    90     |
-- | 20         |     1        |    80     |
-- | 30         |     1        |    70     |
-- | 30         |     3        |    80     |
-- | 30         |     4        |    90     |
-- | 40         |     1        |    60     |
-- | 40         |     2        |    70     |
-- | 40         |     4        |    80     |
-- +------------+--------------+-----------+

结果表:

-- +-------------+---------------+
-- | student_id  | student_name  |
-- +-------------+---------------+
-- | 2           | Jade          |
-- +-------------+---------------+

我的解决方案是否正确?

--My Solution
Select Student_id, Student_name
From (
Select 
    B.Student_id, 
    A.Student_name,
    Score, 
    Max(Score) Over (Partition by Exam_id) score_max, 
    Max(Score) Over (Partition by Exam_id) score_min 
From
    Student A, Exam B 
Where 
    A.Student_ID = B.Student_ID
) T
Where   
    Score != Max_score or Score != Min_Score
Group by 
    student_id, student_name 
Having 
    Count(*) = (Select distinct count(exam_id) from exam)
Order by
    A.student_id
    

共有1个答案

唐元青
2023-03-14

您的结果是正确的,但您需要对查询进行两次更改。

    < li >您必须在您的score_min中逐个更改最大值。
// ...
min(score) over (partition by exam_id) score_min,
max(score) over (partition by exam_id) score_max    
// ...
having count(1) = 
(select count(distinct exam_id) from exam t2 
where t1.student_id = t2.student_id)
 类似资料:
  • 我有一个sql查询: 这就产生了: Hibernate:选择this_.pName为y0_,this_.kNum为y1_,count(distinct this_.agentg)为y2_from Test_CPView this_where(低(this_.pName+“~”+this_.kNum)like?或低(this_.pName+“~”+this_.kNum)like?或低(this_.p

  • 问题内容: 我有一个简单的MySQL表,其中包含类别列表,级别由parent_id确定: 我正在尝试进行面包屑跟踪。因此,我有孩子的“身份证”,我想让所有可用的父母(重复链,直到我们达到0“家”)。可能有任意数量或子行达到无限深度。 目前,我正在为每个父母使用SQL调用,这很麻烦。SQL中有一种方法可以对一个查询执行全部操作吗? 问题答案: 从这里改编: 该行是当前页面的页码。结果如下:

  • 执行技术方面的评价只是整体评价进程的一半;最终产品是一份内容详实的报告。报告应该简单易懂、突出所有评估期间找到的风险,并将之呈现给管理员工和技术员工。 报告需要有三个主要部分,并且在一定程度上允许每个部分被单独分离出来,打印并交与相关的团队,比如开发人员或者系统管理员。 通常推荐有如下几个部分:. 1. 内容提要 内容提要集合了所有评价,并给予管理层或系统管理员一个对全局风险的认识。使用的语言应该

  • 问题内容: 在C#中生成SQL查询的最安全的方法是什么,包括清除用户输入以防止注入?我正在寻找使用不需要外部库的简单解决方案。 问题答案: 使用Sql参数: http://msdn.microsoft.com/zh- cn/library/system.data.sqlclient.sqlparameter(v=vs.80).aspx 这是C#中的示例

  • 我们有三个表格用户,答案和拉伸。当某人登录到我们的系统时,我们将user_id、created_at和updated_at存储在拉伸表中,当他/她注销时,更新删除在同一行中。 会议时间30分钟。 id id user_id 身体 created_at updated_at id 现在,我只想从Stretcions表中得到那些已经给出答案的行。我写了这个查询,但它需要很多时间,但没有返回准确的数据。

  • 我有3个表作为学生数据,包括学生的数据,科目表的数据提供的所有科目和分数,学生获得的每一个科目的分数。通过StudentId标记到StudentData表的表映射,通过SubjectId标记到Subjects表的表映射 我想做的是选择每个科目的最高分数和学生的名字,如下所示 所以我写了一个甲骨文PL / SQL查询如下, 但它只给出了一个结果。请帮助我开发一个查询来获取我的预期结果集。