0

再会。在我的工作中,我发现了一个小问题。我认为我是更糟糕的 SQL 人。两天解决不了 我有一个小 sql 表,包含学生、班级和学校的信息,比如
我需要每个班级中每个学生的每个新(班级和学校)的序列号。没有 PL/SQL

学校班级名称
第一个 1b 史密斯
第一个 1b 琼斯
前 1b 威廉姆斯
第二个 1a 泰勒
第二个 1b 布朗
第二个 1b 戴维斯

还有我需要的表

编号 学校 班级名称
   1 前 1b 史密斯
   2 前 1b 琼斯
   3 前 1b 威廉姆斯
   1 秒 1a 泰勒
   1 秒 1b 棕色
   2 秒 1b 戴维斯
4

1 回答 1

1

我知道您解决了它,但我认为任何查找此问题的人都希望看到完整的解决方案

SQL 小提琴演示:http ://sqlfiddle.com/#!4/a6756/8

SELECT 
   row_number() over (partition BY school, class ORDER BY school, class) as nr
   , s.*
from students s

现在仅按学校和班级计算行数。

每当我处理分析函数时,我都不得不稍微挠头,通常总是参考这个页面,我发现这是一个很好的教程和记忆复习:http ://www.orafaq.com/node/55

编辑:

根据 Clockwork-Muse 的评论,我删除了关于order by分析函数内部功能的评论,并引用了 Oracle 文档:

http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions004.htm#i81407

order_by_clause

使用 order_by_clause 指定数据在分区内的排序方式。对于所有分析函数,您可以在多个键上对分区中的值进行排序,每个键都由 value_expr 定义,每个键都由排序序列限定。

于 2013-10-20T07:45:18.850 回答