SQL 中的用户定义标量函数

Posted

技术标签:

【中文标题】SQL 中的用户定义标量函数【英文标题】:User Defined Scalar functions in SQL 【发布时间】:2014-01-19 05:11:10 【问题描述】:

我是 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)

第一个。看起来不太好。

【问题讨论】:

嗨,Bogdan,我无法在这里发表评论,所以我在那里编辑了我的问题。 其实我只是个初学者。我想如果我们在 where 子句中指定考试 ID(数学为 1),它应该可以工作。 好的。你能只显示那些按标记降序排列的“数学”标记吗? 您是否指向此查询 - “从 sql_studentmarks 中选择 stm_studentid,其中 stm_examid=1 order by stm_mark desc”@BogdanSahlean 好的,我明白了。非常感谢.. @BogdanSahlean 【参考方案1】:

这看起来像你想要的 1。

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

【讨论】:

嗨 Co. Aden,我的“sql_exam”表包含两个考试科目。数学和英语。 'sql_studentmarks' 包含每个学生在每个科目中获得的学生 ID 和分数。标量函数应返回数学成绩最高的学生的 ID。

以上是关于SQL 中的用户定义标量函数的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL编程 —— 用户自定义函数(标量函数)

用户定义的标量函数的 SQL*Server 常量值 - 性能

SQL Server用户定义的函数(UDF)使用详解

使用 EXECUTE 从 SQL Server 调用用户定义函数时的标量结果不同

数据库原理与应用(SQL Server)笔记 第十章 用户定义函数

Flink Table API & SQL 自定义 Scalar 标量函数