我有两个问题:
是否有可能通过仅指定一列来在Oracle中使用dbms_random.random
OR dbms_random.value
?
如果可以达到以上条件,我可以将出现的随机生成值限制为最多5次,例如?
我正在使用Oracle 11g :)谢谢。
free
表:
freeID | lecturerID | availableID
1 1004 10
2 1004 11
3 1004 12
4 1004 13
5 1005 11
6 1005 12
7 1005 13
8 1005 14
这是我的疑问:
SELECT DISTINCT e1.FreeID, e1.lecturerID, e1.AVAILABLEID,
e2.FREEID, e2.LECTURERID, e2.AVAILABLEID,
s.studentID, s.studentName, s.lecturerID
FROM free e1
INNER JOIN free e2
ON e1.availableID = e2.availableID
JOIN student s
ON s.lecturerID = e1.LECTURERID
AND e1.lecturerID='1004'
AND e2.lecturerID='1005'
AND e1.AVAILABLEID = e2.availableid
根据以上查询,我INNER JOIN
free
表与availableID
一起查找具有相同lecturerID
的{{1}}。
然后,我availableID
再次使用JOIN
表与student
预期结果:
lecturerID
我希望 freeID | e1.lecturerID | e1.availableID | e1.availableID | e2.lecturerID
1 1004 13 13 1005
2 1004 11 11 1005
3 1004 12 12 1005
4 1004 13 13 1005
列在其中随机选择,只要它们都具有相同的值,每个讲师都具有相同的availableID
且不超过5次出现次数。如果超过,它将移动到下一个值。
答案 0 :(得分:2)
您可以使用窗口函数以随机顺序为同一讲授中的每个联接分配行号,然后添加条件,即只应采用第一个:
SELECT *
FROM (
SELECT e1.FreeID,
e1.lecturerID,
e1.availableID,
e2.lecturerID AS lectureID2,
s.studentID,
s.studentName,
ROW_NUMBER() OVER (PARTITION BY e1.lecturerID
ORDER BY dbms_random.random) AS rn
FROM free e1
INNER JOIN free e2
ON e1.availableID = e2.availableID
INNER JOIN student s
ON s.lecturerID = e1.lecturerID
WHERE e1.lecturerID = '1004'
AND e2.lecturerID = '1005'
)
WHERE rn <= 5