在 SQL SERVER 中使用聚合函数时如何同时显示 id 和 name

Posted

技术标签:

【中文标题】在 SQL SERVER 中使用聚合函数时如何同时显示 id 和 name【英文标题】:How to display both id and name while using an aggregate function in SQL SERVER 【发布时间】:2017-12-12 06:27:57 【问题描述】:

我正在制作一个记分卡,需要调用玩家在游戏中获得的 id、姓名和总收入。每一轮都由用户的 ID 和用户在该轮中赚取的钱存储。用户 ID 和玩家名称存储在一个名为“USER_MASTER”的单独表中。一场比赛有多个回合。最后,我应该在记分卡上显示每个人的身份证、姓名和收入金额。通过我的尝试,我只能使用 group by 在单个 select 语句中带来 id 和得分总和。我无法同时调用 id 和 name,因为它会引发错误

“TESTDB.dbo.USER_MASTER.GAMER_NAME”在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。

有没有办法在同一个 select 语句中总结并显示 id 和 name? 我使用的查询是:

SELECT x.GAMER_CODE as "USER_ID", y.GAMER_NAME as "USERNAME", 
sum(x.Round_Score) as TOTAL_SCORE
FROM [TESTDB].[dbo].[Game_Details] x 
INNER JOIN TESTDB.dbo.USER_MASTER y 
on x.GAMER_CODE=y.GAMER_CODE
Group By x.GAMER_CODE;

编辑:我使用的是 SQL SERVER 2012。

【问题讨论】:

尝试在 SELECT 语句中的 GAMER_NAME 周围放置一个 MAX()...假设玩家名称与玩家代码是 1:1,无论如何它们都是相同的,所以只需选择最大值。大功告成。 【参考方案1】:

由于您按 id 分组,您应该也可以安全地将名称添加到 group by。这对你有用吗?

SELECT x.GAMER_CODE as "USER_ID", y.GAMER_NAME as "USERNAME", 
sum(x.Round_Score) as TOTAL_SCORE
FROM [TESTDB].[dbo].[Game_Details] x 
INNER JOIN TESTDB.dbo.USER_MASTER y 
   on x.GAMER_CODE=y.GAMER_CODE
Group By x.GAMER_CODE, y.GAMER_NAME;

【讨论】:

是的,确实解决了我的问题。我从来没有想过我可以跨两个不同表中的字段进行分组。教程中的任何地方都没有涵盖此类场景。非常感谢您的正确想法。

以上是关于在 SQL SERVER 中使用聚合函数时如何同时显示 id 和 name的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server中的聚合函数都有哪些?

SQL Server中的开窗函数是啥?

SQL Server中的聚合函数都有哪些?

SQL Server聚合函数与聚合开窗函数

在将数据聚合到视图中需要帮助 (SQL Server)

sql server中啥是聚合函数