Sql 如何将一列的结果合并到另一列
我正试图创建一个学生数据库,但我坚持了给定的要求 我被要求创建两个表格,一个是学生注册号、受试者总数,另一个是学生姓名、总数、排名。我可以理解,这里我们需要单独使用学生的名字,稍后再合并,但让我在学生科目中留下印象的部分可能会有所不同,这意味着如果1号学生有3个科目,那么2号学生可能有2个科目,3号学生可能有5个科目,根据这一点,我们必须排列顺序Sql 如何将一列的结果合并到另一列,sql,sql-server,Sql,Sql Server,我正试图创建一个学生数据库,但我坚持了给定的要求 我被要求创建两个表格,一个是学生注册号、受试者总数,另一个是学生姓名、总数、排名。我可以理解,这里我们需要单独使用学生的名字,稍后再合并,但让我在学生科目中留下印象的部分可能会有所不同,这意味着如果1号学生有3个科目,那么2号学生可能有2个科目,3号学生可能有5个科目,根据这一点,我们必须排列顺序 CREATE TABLE Student (StudentID int, StudentName varchar(6), Details varcha
CREATE TABLE Student
(StudentID int, StudentName varchar(6), Details varchar(1));
INSERT INTO Student
(StudentID, StudentName, Details)
VALUES
(1, 'John', 'X'),
(2, 'Paul', 'X'),
(3, 'George', 'X'),
(4, 'Paul', 'X');
CREATE TABLE Subject
(SubjectID varchar(1), SubjectName varchar(7));
INSERT INTO Subject
(SubjectID, SubjectName)
VALUES
('M', 'Math'),
('E', 'English'),
('H', 'History');
CREATE TABLE Mark
(StudentID int, SubjectID varchar(1), MarkRate int);
INSERT INTO Mark
(StudentID, SubjectID, MarkRate)
VALUES
(1, 'M', 90),
(1, 'E', 100),
(2, 'M', 95),
(2, 'E', 70),
(3, 'E', 95),
(3, 'H', 98),
(4, 'H', 90),
(4, 'E', 100);
我需要2个输出
第一个是
ID |subjects |marks
----------------------------------------------------------
1 maths 98
1 science 87
1 social 88
2 maths 87
2 english 99
3 maths 96
3 evs 100
3 social 88
3 history 90
第二张表是
NO |name |total|rank
----------------------------------------------------------
1 xxx 123 1
2 yyy 456 2
3 zzz 789 3
我需要像这样输出n个条目我知道第一个查询列出了每个学生的分数
SELECT
m.StudentID as ID,
s.SubjectName as subjects,
m.MarkRate as marks
FROM
Mark m
INNER JOIN Subject s on m.SubjectID = m.SubjectID
ORDER BY
m.StudentID,
s.SubjectName
第二个查询给出了学生的总分及其排名
SELECT
X.StudentID,
X.StudentName,
ROWNUMBER() OVER ( ORDER BY X.TotalMark desc) as Rank
FROM (
SELECT
m.StudentID,
s.StudentName,
sum(m.MarkRate) TotalMark
FROM
Mark m
INNER JOIN Student s on s.StudentID = m.StudentID
GROUP BY
m.StudentID,
s.StudentName
) X
ORDER BY X.TotalMark desc
输出
StudentID SubjectName MarkRate
1 Math 90
1 English 100
2 Math 95
2 English 70
3 English 95
3 History 98
4 History 90
4 English 100
StudentID StudentName MarkRate rn
3 George 193 1
4 Paul 190 2
1 John 190 2
2 Paul 165 4
第二个问题
with cte as
(
select a.StudentID,StudentName,sum(MarkRate)MarkRate from #Student a join #Mark B on a.StudentID=b.StudentID
group by a.StudentID,StudentName
)
select *,rank() over( order by MarkRate desc) as rn from cte
输出
StudentID SubjectName MarkRate
1 Math 90
1 English 100
2 Math 95
2 English 70
3 English 95
3 History 98
4 History 90
4 English 100
StudentID StudentName MarkRate rn
3 George 193 1
4 Paul 190 2
1 John 190 2
2 Paul 165 4
要获取主题名称的标记列表,只需执行以下操作: 您需要使用
JOIN
:
SELECT M.StudentId
,SU.SubjectName
,M.MarkRate
FROM Mark M
INNER JOIN Subject SU ON M.SubjectID = SU.SubjectID
要获得排名的总分,您需要使用GROUP BY
和RANK()
函数:
SELECT M.StudentId
,ST.StudentName
,SUM(MarkRate) Total
,RANK() OVER(ORDER BY SUM(MarkRate) ) Rank
--,RANK() OVER(ORDER BY SUM(MarkRate) DESC) Rank
FROM Mark M
INNER JOIN Student ST ON M.StudentId = ST.StudentId
GROUP BY M.StudentId
,ST.StudentName
您可以对这两个输出尝试以下查询
SELECT
Student.StudentID as ID,
[Subject].SubjectName as subjects,
Mark.MarkRate as marks
FROM
Student
INNER JOIN Mark on Student.StudentID = Mark.StudentID
INNER JOIN [Subject] on [Subject].SubjectID = Mark.SubjectID
ORDER BY
Student.StudentID,
SubjectName
下面是第二次输出的查询。正如您所说,对于分数较低的人,可以获得排名1,否则您可以在下面的查询中按总描述排序,以获得较高的分数排名1
SELECT ID, StudentName, Total, Row_number() Over (Order BY Total) Ranks FROM(
SELECT Id, StudentName, SUM(marks) as Total FROM (
SELECT
Student.StudentID as ID,
[Subject].SubjectName as subjects,
Mark.MarkRate as marks,
Student.StudentName
FROM
Student
INNER JOIN Mark on Student.StudentID = Mark.StudentID
INNER JOIN [Subject] on [Subject].SubjectID = Mark.SubjectID
)Tot
Group By Id, StudentName
)Ranks
“不参加”是什么意思?@joakim Danielson这是一个错误,先生,我将删除它。为什么得分最高的学生排在最后?@salman,不管科目如何,学生的总数都被视为排名sir@Jojofever请在发布代码片段时检查答案,您的答案应该包含对您的解决方案的解释。@fariraishe shubam它工作正常,我还有另一个疑问,我们可以使用更新关键字吗it@fariraisheShumba我需要动态更新加法函数,当我添加新值时,比如insert intoit中的值正常工作,另外,我还有一个疑问,我们是否可以在itit中使用更新关键字?IT是否正常工作?我还有一个疑问,我们是否可以在itit中使用更新关键字?IT是否正常工作,另外,我还有一个疑问,我们是否可以使用更新关键字it@Jojofever您想更新什么?我需要使用关键字UPDATE来更新我输入的每个实体的总分数(我的任务是在其中使用关键字UPDATE)