gpt4 book ai didi

sql - SQL Server 中的平均值

转载 作者:行者123 更新时间:2023-12-04 08:27:14 26 4
gpt4 key购买 nike

我正在学习 SQL Server,我有一个从我同事那里得到的示例数据库。
我之前创建了一个可以正常工作的存储过程。现在我试图显示我目前正在挣扎的列的平均值。
您的支持意义重大,我将从中吸取教训。
所以这是我的查询:

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
现在我想根据名称和技术列显示平均评级,这样我的表应该像
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 Server 中,方括号中) - 或者更好的是,使用不需要引用的标识符
  • rating是一个整数,你需要在平均之前把它变成小数(否则你会得到一个整数平均值)
  • 关于sql - SQL Server 中的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65201717/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com