Sql。不同的行号。没有PL/SQL

Sql。不同的行号。没有PL/SQL,sql,oracle,sqlplus,Sql,Oracle,Sqlplus,你好。 我在工作中发现了一个小问题。我觉得我比你差。我两天都解不出来。 我有一个由学生、班级和学校的信息组成的小sql表,如 我需要每个班级每个新学生(班级和学校)的序列号。没有PL/SQL School Class Name first 1b Smith first 1b Jones first 1b Willams second 1

你好。 我在工作中发现了一个小问题。我觉得我比你差。我两天都解不出来。 我有一个由学生、班级和学校的信息组成的小sql表,如
我需要每个班级每个新学生(班级和学校)的序列号。没有PL/SQL

School Class Name first 1b Smith first 1b Jones first 1b Willams second 1a Taylor second 1b Brown second 1b Davies 学校班级名称 史密斯先生 琼斯一号 威廉一世 第二个1a泰勒 第二个1b棕色 戴维斯第二 和我需要的桌子

Number School Class Name 1 first 1b Smith 2 first 1b Jones 3 first 1b Willams 1 second 1a Taylor 1 second 1b Brown 2 second 1b Davies 学校班级名称编号 1史密斯先生 2琼斯先生 3威廉斯 1秒1a泰勒 1秒1b棕色 2秒1b戴维斯
我知道你已经解决了,但我想任何人都想看到完整的解决方案

SQL Fiddle演示:

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

每当我处理分析函数时,我都会有点挠头,通常会参考这一页,我发现这是一个很好的教程和记忆复习:

编辑:

在Clockwork Muse的评论之后,我删除了有关分析功能中的order by功能的评论,并引用了Oracle文档:

按顺序排列条款

使用order_by_子句指定数据在 隔断对于所有分析函数,可以按顺序排列值 分区在多个键上,每个键由一个值_expr定义,每个键 通过订购顺序确定的


通过在(按顺序划分)上选择行数()从技术上解决,
ORDER by
不会产生稳定的结果(也就是说,对相同数据的后续运行不能保证产生相同的编号);这是因为它是按标准划分的
分区。诚然,考虑到RDBMS的实现方式,实际上它很可能是稳定的。尽管如此,最好使用提供稳定排序的列(例如
name
),尽管这可能会给出最快的结果。非常好的提示。我做了编辑。非常感谢你。
SELECT 
   row_number() over (partition BY school, class ORDER BY school, class) as nr
   , s.*
from students s