【问题标题】:How to display both id and name while using an aggregate function in SQL SERVER在 SQL SERVER 中使用聚合函数时如何同时显示 id 和 name
【发布时间】: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,无论如何它们都是相同的,所以只需选择最大值。大功告成。

标签: sql-server group-by inner-join aggregate-functions


【解决方案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;

【讨论】:

  • 是的,确实解决了我的问题。我从来没有想过我可以跨两个不同表中的字段进行分组。教程中的任何地方都没有涵盖此类场景。非常感谢您的正确想法。
猜你喜欢
  • 1970-01-01
  • 2020-06-08
  • 2011-02-19
  • 2017-01-29
  • 2013-08-14
  • 2015-12-29
  • 1970-01-01
  • 2020-08-05
  • 2017-09-05
相关资源
最近更新 更多