Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的用户定义标量函数_Sql_Sql Server - Fatal编程技术网

SQL中的用户定义标量函数

SQL中的用户定义标量函数,sql,sql-server,Sql,Sql Server,我是SQL新手,正在学习SQL中的用户定义函数 我有两个表,我已经给出了插入到这些表中的行 --Table1 create table sql_exam( exa_examid bigint not null primary key, exa_name varchar(100) not null, exa_maxmark decimal(5,2) not null, exa_minmarkreqdforpass decimal(5,2) not null, exa_examscheduleti

我是SQL新手,正在学习SQL中的用户定义函数

我有两个表,我已经给出了插入到这些表中的行

--Table1

create table sql_exam(
exa_examid bigint not null primary key,
exa_name varchar(100) not null,
exa_maxmark decimal(5,2) not null,
exa_minmarkreqdforpass decimal(5,2) not null,
exa_examscheduletime datetime not null
)

--Rows inserted into Table1

insert into sql_exam(exa_examid,exa_name,exa_maxmark,exa_minmarkreqdforpass,exa_examscheduletime) values (1,'Maths',100,40,'2012-10-10 10:00')
insert into sql_exam(exa_examid,exa_name,exa_maxmark,exa_minmarkreqdforpass,exa_examscheduletime) values (2,'English',75,35,'2012-10-11 10:00')

--Table2

create table sql_studentmarks(
stm_studentid int not null primary key,
stm_examid bigint foreign key references sql_exam(exa_examid),
stm_mark decimal(5,2)
)

--Rows inserted into Table2
insert into sql_studentmarks(stm_studentid,stm_examid,stm_mark) values (1,1,80)
insert into sql_studentmarks(stm_studentid,stm_examid,stm_mark) values (2,1,90)
insert into sql_studentmarks(stm_studentid,stm_examid,stm_mark) values (3,1,40)
insert into sql_studentmarks(stm_studentid,stm_examid,stm_mark) values (1,2,70)
insert into sql_studentmarks(stm_studentid,stm_examid,stm_mark) values (2,2,60)
insert into sql_studentmarks(stm_studentid,stm_examid,stm_mark) values (3,2,17)
我需要一个关于创建标量函数的帮助,我需要

一个标量函数,返回“数学”得分最高的学生的学生ID 一个表格函数,返回学生ID和总分最高的学生获得的分数。 我只是想学习SQL。我试过-

create function fnGetMathsHightest()
returns int
as
begin
declare @st_id int
return @st_id
end



select dbo.fnGetMathsHightest() 
from sql_studentmarks 
where stm_examid=1 
group by stm_studentid 
having stm_mark=max(stm_mark)

第一个。它看起来不太好。

它看起来像是你想要的

CREATE FUNCTION ssfnGetStudenytId
(
    -- Add the parameters for the function here
)
RETURNS int
AS
BEGIN

declare @vId as int 
set @vId =  Select stm_studentid  from  sql_studentmarks where stm_mark = (SELECT  MAX( stm_mark )from sql_studentmarks )

RETURN @vId
END

嗨,博格丹,我不能在这里发表评论,所以我在那里编辑了我的问题。实际上我只是一个初学者。我想如果我们在where子句中指定数学考试id 1,它应该会起作用。您能否仅显示按分数降序排列的“数学”分数?您是否指向此查询-从sql_studentmarks中选择stm_studentid,其中stm_examid=1,按stm_mark desc@Bogdansahlean排序好的。非常感谢@Bogdansahelanhi Co.Aden,我的“sql_考试”表包含两个考试科目。数学和英语。“sql_studentmarks”包含学生ID和每个学生在每个科目上获得的分数。标量函数应该返回数学成绩最高的学生的ID。