如何在sql中的所有行中打印列的总和

时间:2012-07-22 06:40:56

标签: sql oracle mysqli teradata

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

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

Q1。如何编写一个打印新列的SQL查询,该列是“目标数”列的总和?

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

Q2。如何编写一个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'

3 个答案:

答案 0 :(得分:6)

您需要使用窗口函数...

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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