SQL 拥有 sum 和 avg 的函数
SQL own Function with sum and avg
我尝试编写一个自己的函数,将值 (NumberStars) 加在一起,然后根据 NUmberStars 计算平均值。
Numberstar 是一个获取一些数字的值,例如它有时获取值 5 有时获取 4 或 2。
函数应该 add/sum 所有这些值,然后计算它们的平均值
该值取自 table:
CREATE TABLE Rating (
client_ID NUMBER NOT NULL,
Tutor_ID NUMBER NOT NULL,
NumberStars NUMBER NOT NULL,
Comment VARCHAR2(100) NULL);
CREATE OR REPLACE FUNCTION avgRating( NumberStars NUMBER)
RETURN number
IS
avgRat NUMBER;
BEGIN
select sum (NumberStars) INTO avgRat FROM Rating;
select avg (avgRat) ;
Return avgRat;
END;
这是我尝试过的,但抱歉这是我的第一个函数
我想,您想获得特定导师的平均评分?那么你可以选择:
CREATE OR REPLACE FUNCTION avgRating (Tutor NUMBER)
RETURN number
IS
avgRat NUMBER;
BEGIN
SELECT AVG(NumberStars) AS avgRat FROM Rating WHERE Tutor_ID = Tutor;
Return avgRat;
END;
AVG
函数将根据 WHERE
条件自动计算给定字段的平均值。
(在我看来,将 NumberStars
传入函数没有意义 - 否则,请澄清您的问题。)
您不需要为此编写函数,因为有 built-in SUM
和 AVG
函数。
如果你想对每个导师的星星进行总结,那么你可以使用:
SELECT tutor_id,
SUM(NumberStars) AS total_stars
FROM rating
GROUP BY tutor_id
如果您想计算所有导师的总星级的平均值,您可以将其包装在外部查询中并取平均值:
SELECT AVG(total_stars) AS avg_total_stars
FROM (
SELECT tutor_id,
SUM(NumberStars) AS total_stars
FROM rating
GROUP BY tutor_id
)
或者,如果您想 return 每个导师并包括总体平均值,您可以使用分析 AVG
函数:
SELECT tutor_id,
SUM(NumberStars) AS total_stars,
AVG(SUM(NumberStars)) OVER () AS avg_total_stars
FROM rating
GROUP BY tutor_id
在这种情况下,将首先计算 GROUP BY
和聚合,然后将分析函数应用于 OVER
整个结果集(因为没有指定更小的分区)。
我尝试编写一个自己的函数,将值 (NumberStars) 加在一起,然后根据 NUmberStars 计算平均值。
Numberstar 是一个获取一些数字的值,例如它有时获取值 5 有时获取 4 或 2。 函数应该 add/sum 所有这些值,然后计算它们的平均值 该值取自 table:
CREATE TABLE Rating (
client_ID NUMBER NOT NULL,
Tutor_ID NUMBER NOT NULL,
NumberStars NUMBER NOT NULL,
Comment VARCHAR2(100) NULL);
CREATE OR REPLACE FUNCTION avgRating( NumberStars NUMBER)
RETURN number
IS
avgRat NUMBER;
BEGIN
select sum (NumberStars) INTO avgRat FROM Rating;
select avg (avgRat) ;
Return avgRat;
END;
这是我尝试过的,但抱歉这是我的第一个函数
我想,您想获得特定导师的平均评分?那么你可以选择:
CREATE OR REPLACE FUNCTION avgRating (Tutor NUMBER)
RETURN number
IS
avgRat NUMBER;
BEGIN
SELECT AVG(NumberStars) AS avgRat FROM Rating WHERE Tutor_ID = Tutor;
Return avgRat;
END;
AVG
函数将根据 WHERE
条件自动计算给定字段的平均值。
(在我看来,将 NumberStars
传入函数没有意义 - 否则,请澄清您的问题。)
您不需要为此编写函数,因为有 built-in SUM
和 AVG
函数。
如果你想对每个导师的星星进行总结,那么你可以使用:
SELECT tutor_id,
SUM(NumberStars) AS total_stars
FROM rating
GROUP BY tutor_id
如果您想计算所有导师的总星级的平均值,您可以将其包装在外部查询中并取平均值:
SELECT AVG(total_stars) AS avg_total_stars
FROM (
SELECT tutor_id,
SUM(NumberStars) AS total_stars
FROM rating
GROUP BY tutor_id
)
或者,如果您想 return 每个导师并包括总体平均值,您可以使用分析 AVG
函数:
SELECT tutor_id,
SUM(NumberStars) AS total_stars,
AVG(SUM(NumberStars)) OVER () AS avg_total_stars
FROM rating
GROUP BY tutor_id
在这种情况下,将首先计算 GROUP BY
和聚合,然后将分析函数应用于 OVER
整个结果集(因为没有指定更小的分区)。