【问题标题】:how to print a sum of column in all rows in sql如何在sql中的所有行中打印列的总和
【发布时间】:2012-07-20 20:16:57
【问题描述】:

假设我有一个名为“myPlayerInfo”的表,其中包含以下行

'player name' 'number of goals'
'john'        '10'
'martin'      '20'
'jen'         '20'

第一季度。如何编写一个 sql 查询来打印一个新列,该列是“目标数”列的总和?

'player name' 'number of goals'  'Total goals by all players'
'john'        '10'               '50'
'martin'      '20'               '50'
'jen'         '20'               '50'

第二季度。如何编写一个 sql 查询来打印一个新列,该列是每个球员的进球百分比以及我们在第一季度所做的总进球数列。 ?

'player name' 'number of goals' '% goals scored'  'Total goals by all players'
'john'        '10'              '20'                  '50'
'martin'      '20'              '40'                  '50'
'jen'         '20'              '40'                  '50'

【问题讨论】:

    标签: sql oracle teradata


    【解决方案1】:

    你需要使用窗口函数:

    select
        player_name,
        number_of_goals,
        (number_of_goals * 100) / SUM(number_of_goals) OVER () AS percent_goals_scored,
        SUM([number of goals]) OVER () AS total_goals_by_all_players
    from myPlayerInfo
    

    【讨论】:

      【解决方案2】:

      您可以对从子选择派生的所有行的总和执行笛卡尔连接:

      SELECT 
          a.player_name, 
          a.number_of_goals, 
          (a.number_of_goals / b.goalsum)*100 AS percent_scored,
          b.goalsum
      FROM   
          myPlayerInfo a
      CROSS JOIN 
          (SELECT SUM(number_of_goals) AS goalsum FROM myPlayerInfo) b
      

      【讨论】:

        【解决方案3】:

        你的意思是SELECT name, goals, sum(goals) as sum, goals/sum(goals) as relgoals FROM table;?

        【讨论】:

        • 'goals'/sum('goals') 无效。 'goals' 是一个字符文字。不是数字也不是列引用。您可能是指goals(不带任何引号)。
        • 是的,你是对的,还没弄清楚如何在代码块中使用反引号。现在删除了单引号。
        • 您不需要这些列名的反引号,并且在 MySQL 的“外部”它们无论如何都是非法的。但是,如果您真的想使用它们,只需突出显示代码(包括反引号)并单击 {} 按钮。
        猜你喜欢
        • 2020-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多