我正在尝试编写一个SQL查询,该记录将记录从一个表分发到另一个表,该表采用相同的数字.
在这个例子中,我有两个表,Students并且Teachers,我想将学生分配给每个教师.
学生:(亚当,班纳特,埃尔默,贾斯汀,路易斯,诺亚,杰克)
老师:( Leo,Kyle,Ethan)
注意:
例如,如果我们有七名学生和三名教师,前两名教师将招收两名学生,最后一名将招收三名学生.
结果:
Student | Teacher
--------+--------
Adam | Leo
Bennet | Leo
Elmer | Kyle
Justin | Kyle
Louis | Ethan
Noah | Ethan
Jack | Ethan
Run Code Online (Sandbox Code Playgroud)
我怎么能在Oracle SQL中做到这一点?
这不一定按照您希望的顺序分配教师,但会按照您的意愿按比例分配教师.它使用该NTILE函数将名称放入存储桶并为每行分配适当的存储桶编号.
如果您希望订购,则必须为教师和学生提供唯一的Id列.
with tch as
(
select t.*, row_number() OVER ( ORDER BY name ) as n from teachers t
),
ct AS
(
select count(*) as cnt from Teachers
)
select s.name as student,tch.name as teacher from
(
SELECT name, NTILE(cnt) OVER (partition by cnt ORDER BY name) AS n
FROM Students cross join
ct
) s join tch on tch.n = s.n;
Run Code Online (Sandbox Code Playgroud)
Student| Teacher
----- | ----
Adam | Ethan
Bennet | Ethan
Elmer | Ethan
Jack | Kyle
Justin | Kyle
Louis | Leo
Noah | Leo
Run Code Online (Sandbox Code Playgroud)