当前位置: 首页 > 面试题库 >

SQL查询:返回组的最大值记录

傅啸
2023-03-14
问题内容

我有一个具有相似结构和数据的示例表,如下所示:

+------+---------+-------------+------------+
| S_ID | S_NAME  | SUBJECT     | MARK_VALUE |
+------+---------+-------------+------------+
|    1 | Stud    | SUB_1       |         50 |
|    2 | Stud    | SUB_2       |         60 |
|    3 | Stud    | SUB_3       |         70 |
|    4 |  Stud_1 | SUB_1       |         40 |
|    5 |  Stud_1 | SUB_2       |         50 |
|    6 |  Stud_2 | SUB_2       |         40 |
+------+---------+-------------+------------+

表在每个学生出现的所有科目中都有每个学生的合并标记。

请帮助我,编写一个查询以提取每个学生( 不分学科/其他学生 )获得的MAXIMUM分数,如下所示:

按S_Name和Max(MARK_Value)分组

+------+---------+-------------+------------+
| S_ID | S_NAME  | SUBJECT     | MAX_MARK   |
+------+---------+-------------+------------+
|    3 | Stud    | SUB_3       |         70 |
|    5 |  Stud_1 | SUB_2       |         50 |
|    6 |  Stud_2 | SUB_2       |         40 |
+------+---------+-------------+------------+

问题答案:

使用row_number()窗口功能

select * from
 ( select *,
  row_number()over(partition by s_name order by MARK_VALUE desc) rn
 from table_name
) t where t.rn=1

或者您可以使用相关的子查询

select t1.* from table_name t1
  where t.MARK_VALUE=(select max(MARK_VALUE) from table_name t2 where t2.S_NAME=t1.S_NAME)


 类似资料:
  • 问题内容: 我负责处理的应用程序之一是每隔x秒检查一次Oracle DB表,以查看是否有新数据要处理(其他实时应用程序正在填充该数据)。 我们新的客户业务流程迫使我们的实时性在同一时间(比如说10000)同时每天填充几次记录来填充该表。下次我的应用程序检查是否有任何要处理的内容时,遇到10 000条记录并尝试对其进行处理。 它的设计不是很好,而且扩展性还不够好。快速解决方案是限制该应用程序从Ora

  • 问题内容: 我的查询导致以下错误: 消息512,级别16,状态1,过程Item_insupd,第17行 子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。 询问: 我怀疑这种情况的发生是因为我的子查询不包含,但是不幸的是,我不知道如何构造正确的子句。 问题答案: 我怀疑问题出在此字符串中(您的代码中的第26行): 看起来像返回多个行,所以您遇到了错

  • 问题内容: 有没有办法从SQL查询返回二维数组?喜欢.. “选择id,x,y,z FROM测试” ..并将其返回为id => x,y,z吗?我可以做一个循环并创建第二个数组,但我想那是我可能不必做的额外工作。只是现在不熟悉SQL。 问题答案: 在PHP中,SQL查询将仅返回结果集。行和列。 您需要进一步的循环才能将其处理为您所指类型的数组。没问题,如果您经常使用它,则应将其作为数据库包装的一部分。

  • 问题内容: 从如下所示的数组中,如何获取数组中最大值的索引。对于下面的数组,期望的结果将为‘11’。 问题答案: 我的解决方案是: 注意: 这样,您可以检索与给定 最大值 相关的 每个键 。 __ 如果您只对 其中一个键 感兴趣,只需使用 $ maxs [0]

  • 问题内容: 我有下表: 如何在每个“班级”中找到最大“分数”的“名称”? 要求的输出: 这是针对MySQL的。 问题答案:

  • 问题内容: 我有一张桌子,上面有一张图表中的数据。 例如 我需要一个查询,该查询返回值在局部最大值处的结果,即特定索引处的值大于index + 1和index-1处的值。 因此,对于示例集,它应返回索引列表:2、6、9,它们对应于值7、12、14。 我在SQLite中使用PHP。我可以用php中的foreach循环来做到这一点,但想知道是否有一种简单的方法可以仅使用SQL命令来做到这一点。 任何输