SQL 服务器中的平均值

AVG in SQL Server

我正在学习 SQL 服务器,我有一个从同事那里得到的示例数据库。

我之前创建了一个存储过程,它运行良好。现在我正在尝试显示我目前正在努力的列的平均值。

你们的支持意义重大,我会从中学习。

所以这是我的查询:

SELECT  
    CONCAT(ud.FirstName, ',', ud.LastName) AS 'Name',
    tech.TechnoName AS 'Techno',
    (rt.Rating) AS 'Rating', rt.FeedBackType,
    rt.Description, rt.ProgramId 
FROM 
    Rating rt, Techno tech, Program pd, User ud
WHERE 
    pd.Id = ud.UserID AND
    pd.TechnoId = tech.TechnoID AND
    rt.PdId = pd.Id
GROUP BY 
    pd.Id, ud.FirstName, ud.LastName, tech.TechnoName, 
    rt.Rating, rt.PdId, rt.Description, rt.FeedBackType
ORDER BY 
    rt.PdId

我的table就像

    Name    Techno    Rating    FeedbackType    Description     ProgramId
    ---------------------------------------------------------------------
    A,B       C#         4          1             ***              100
    A,B       C#         5          1             ***              102
    B,B       JS         4          3             ***              106
    B,C       C++        3          1             ***              280
    B,C       C          5          1             ***              300

现在我想根据名称和技术列显示平均评分,这样我的 table 应该像

Name    Techno     Rating    
--------------------------
A,B       C#         4.5          
B,B       JS         4          
B,C       C++        3          
B,C       C          5         

提前致谢

您需要修改 group by 子句,为每个名称和技术生成一行,并使用聚合函数计算评分:

select  
    concat(ud.firstname,',',ud.lastname) as name, 
    tech.technoname as techno,
    avg(1.0 * rt.rating) as rating
from rating rt
inner join program pd on rt.pdid = pd.id 
inner join techno tech on pd.technoid = tech.technoid
inner join user ud opn pd.id = ud.userid
group by ud.firstname, ud.lastname, tech.technoname
order by ud.firstname, ud.lastname

重要提示:

  • 使用标准联接!隐式连接(在 from 子句中使用逗号,在 where 子句中使用连接条件)是几十年前的遗留语法,应该在新代码中使用

  • 不要使用单引号作为标识符的引号;为您的平台使用相关的引号字符(在 SQL 服务器中,方括号)——或者更好的是,使用不需要引号的标识符

  • 如果rating是一个整数,你需要先把它转成小数再求平均值(否则你得到的是整数平均值)