zod*_*zod 3 sql db2 join row-number
Student Table
SID Name
1 A
2 B
3 C
Marks Table
id mark subject
1 50 physics
2 40 biology
1 50 chemistry
3 30 mathematics
SELECT distinct(std.id),std.name,m.mark, row_number() over() as rownum FROM
student std JOIN marks m ON std.id=m.id AND m.mark=50
Run Code Online (Sandbox Code Playgroud)
使用disticnt后,该结果是A的2倍.我的预期结果将只有一个A.如果我删除row_number()over()作为rownum它工作正常.为什么会这样?如何解决.AM使用DB2 !!
标记表中有两行,其中id = 1,mark = 50 ..因此,您将在学生表中的每一行的输出中获得两行...如果您只需要一行,则必须执行一个组By
SELECT std.id, std.name, m.mark, row_number()
over() as rownum
FROM student std
JOIN marks m
ON m.id=std.id AND m.mark=50
Group By std.id, std.name, m.mark
Run Code Online (Sandbox Code Playgroud)
现在您已经将您的问题澄清为:
我想找到至少一门科目得分为 50 分的所有学生。我会使用查询:
SELECT student.id, '50'
FROM student
WHERE EXISTS (SELECT 1 FROM marks WHERE marks.id = student.id AND marks.mark = 50)
Run Code Online (Sandbox Code Playgroud)
这也使您能够灵活地更改标准,例如至少有一个分数为 50 或更低。
| 归档时间: |
|
| 查看次数: |
38380 次 |
| 最近记录: |