当前位置: 首页 > 知识库问答 >
问题:

如何从SQL中的多列中获取值之和

蓝逸仙
2023-03-14

我有下表:

Season  Name1   Goal1   Name2   Goal2   Name3   Goal3
1990    Smith   2       Abel    1       John    3
1990    Smith   1       Abel    1       John    1
1990    John    0       Smith   2       Abel    5
1991    John    1       Smith   1       Abel    2
1991    Abel    2       John    0       Smith   0
1992    Abel    3       John    0       Smith   1

赛季表示足球赛季,name1,name2表示球员在给定比赛中的位置Goal1表示Name1进球数

我想为每个赛季的每个名字生成一个列表,列出他们踢了多少次球,以及他们进球的数量。类似这样:

Abel 1990 3 games played 7 goals scored
Abel 1991 2 games played 4 goals scored 
Abel 1992 1 games played 3 goals scored 
John 1990 3 games played 2 goals scored

任何帮助都将不胜感激!

共有3个答案

冯沛
2023-03-14

这真的很复杂,但您可以编写一个内联查询,将所有内容都转换为适当的表格式,这样您就可以进行常规的聚合和分组。根据有多少列,继续为1到x添加联合。

SELECT Season, Name, Sum(Goals)
FROM (SELECT Season, Name1 as Name, Goals1 as Goals        
        FROM table
      UNION
      SELECT Season, Name2 as Name, Goals2 as Goals        
        FROM table
      UNION
      SELECT Season, Name3 as Name, Goals3 as Goals        
        FROM table) newtable
GROUP BY Season, Name
拓拔烨赫
2023-03-14

好吧,既然你没有共享你正在使用的RDBMS,我认为这个(丑陋的)查询可以在大多数RDBMS上运行:

SELECT  Name + ' ' + CAST(Season AS VARCHAR(4)) + ' ' +
        CAST(Games AS VARCHAR(4)) + ' games played ' + 
        CAST(Goals AS VARCHAR(4)) + ' goals scored' AS YourColumn
FROM (  SELECT Season, Name, SUM(Goals) AS Goals, COUNT(*) AS Games
        FROM (  SELECT Season, Name1 AS Name, Goal1 AS Goals
                FROM YourTable
                UNION ALL
                SELECT Season, Name2 AS Name, Goal2 AS Goals
                FROM YourTable
                UNION ALL
                SELECT Season, Name3 AS Name, Goal3 AS Goals
                FROM YourTable) AS A
        GROUP BY Season, Name) X

免责声明:这是一个丑陋的查询。

暨宸
2023-03-14
SELECT
    sub.player,
    sub.Season,
    Count(*) AS games_played,
    Sum(sub.goals) AS SumOfgoals
FROM
    (
        SELECT Season, Name1 AS player, Goal1 AS goals
        FROM YourTable
        UNION ALL
        SELECT Season, Name2, Goal2
        FROM YourTable
        UNION ALL
        SELECT Season, Name3, Goal3
        FROM YourTable
    ) AS sub
GROUP BY sub.player, sub.Season
ORDER BY sub.player, sub.Season;

注意,您必须在该子查询中使用UNION ALL。如果您只使用UNION,子查询结果集将只包括赛季、球员和进球的每个组合的一行。但是,当一个球员在一个赛季的多场比赛中得分相同数量的进球时,您希望保留其中的每一行,以便准确计算所进行的比赛和总进球数。

使用Access 2007中的样本数据,该查询生成此结果集。

player Season games_played SumOfgoals
Abel     1990            3          7
Abel     1991            2          4
Abel     1992            1          3
John     1990            3          4
John     1991            2          1
John     1992            1          0
Smith    1990            3          5
Smith    1991            2          1
Smith    1992            1          1
 类似资料:
  • 问题内容: 我有一个这样的表: 因此,(ID,KEY)元组可以视为主键。 我试图返回这样的行: 因此,除了通过对每列进行子选择之外,如何才能抓住键值(如果有的话)并将它们收集到我的单行中?到目前为止,我尝试过的是: 但是出于明显的原因,此操作会为每个匹配的键返回一行,而不是每个id返回一行。 我该如何以自己想要的方式进行操作? 谢谢! 问题答案: 您可以在任何版本的Oracle中旋转这样的数据。

  • 问题内容: 但是我还需要知道: 如何在 Microsoft SQL Server (以我的情况为2008)中完成此操作? 问题答案: 您可以通过查询Information Schema视图获得此信息,甚至更多。 此示例查询:

  • 本文向大家介绍如何从MySQL的varchar列中获取比特定值更多的值?,包括了如何从MySQL的varchar列中获取比特定值更多的值?的使用技巧和注意事项,需要的朋友参考一下 由于要获取比特定值更多的值的列是VARCHAR,因此请使用CAST()函数。例如,要从具有varchar值的列中获取大于999的值。 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中

  • 问题内容: 如果每个员工有多个联系方式,我将获得多行,但我只希望每位员工列出他们的姓,名,部门名称,电子邮件和电话。 所以它应该像这样 这是我所拥有的,但不起作用: 我用以下查询解决了它: 问题答案: 如果要选择,则在子查询中,这两个联接可能是不必要的: 由于它们,您得到的行与特定人的联系人一样多。 最终查询可能类似于:

  • 问题内容: 如何在Python中获取字典中的值列表? 在Java中,将Map的值作为列表获取就像在操作中一样容易。我想知道Python中是否有类似的简单方法可以从字典中获取值列表。 问题答案: 是的,这与Python 2 完全相同: 在Python 3中 (在其中返回字典值的 视图 ):

  • 我有一个拼花文件中的数据,它有两个字段:<code>object_id:String</code>和<code>alpha:Map 它被读入sparkSQL中的数据框,模式如下所示: 我正在使用Spark 2.0,我正在尝试创建一个新的数据帧,其中列需要是加上map中的键,如 我首先想看看我是否至少可以像这样访问地图: 但不幸的是,我似乎无法找到如何访问地图的键。 有人能告诉我如何将< code>