2010-11-10 2592 views
4

好的,我正在做我的家庭作业,并且无法弄清楚如何与SQL相乘以及如何正确定位。如何使用SQL进行乘法运算

我应该“创建一个列出球员(球员名称),当前薪水和反映薪水增加10%的新(创建)列的查询(计算为薪水* 1.1)。按降序排列数据按工资计算“。

这只是一个简单的NHL数据库,我们的老师为这个任务编制。球员表中有74名球员。 players表中的字段是:player_id,player_name,player_salary,team_id和position_id。

这是我到目前为止有:

SELECT player_name, player_salary, SUM(player_salary*1.1) AS NewSalary 
FROM players 
GROUP BY player_salary, player_name; 

通过这种方式,至少运行。我相信我必须将GROUP BY更改为ORDER BY并在最后使用DESC标记,但这不起作用。这是输出我从运行该查询得到:

PLAYER_NAME   PLAYER_SALARY   NEWSALARY    
-------------------- ---------------------- ---------------------- 
Johan Franzen  42000     46200     
Brad Stuart   18000     19800     
Tomas Holmstrom  38000     41800     
Dan Cleary   10000     11000     
Jonathan Toews  32000     35200     
David Krejci   28000     30800     
Mike Ribeiro   10000     11000     
Steve Sullivan  20005     22005.5     
Ryan Getzlaf   28000     30800     
Chris Stewart  18000     19800     
Brad Richards  10000     11000     
Nathan Horton  20000     22000     
James Neal   38000     41800     
Nicklas Lidstrom  44000     48400     
Jiri Hudler   28000     30800     
TJ Oshie    44000     48400     
Blake Comeau   10000     11000     
Drew Stafford  26888     29576.8     
Brenden Morrow  10000     11000     
Daniel Sedin   26000     28600     
PA Parenteau   43000     47300     
Henrik Zetterberg 32000     35200     
Valtteri Filppula 28000     30800     
Tomas Kopecky  26000     28600     
Andrei Kostitsyn  28000     30800     
Marian Hossa   44000     48400     
Henrik Sedin   10000     11000     
Don Smith   20520     22572     
Rick Nash   15750     17325     
Todd Bertuzzi  43000     47300     
Patrick Eaves  10000     11000     
Mike Modano   80000     88000     
Alex Goligoski  28000     30800     
Patrick Kane   44000     48400     
Bobby Ryan   26000     28600     
Dustin Brown   10000     11000     
Patrick Sharp  43000     47300     
John-Michael Liles 10000     11000     
Paul Stastny   14000     15400     
Matt Cullen   10000     11000     
Martin St Louis  32000     35200     
Alexander Semin  28000     30800     
Niklas Kronwall  10000     11000     
John Tavares   42000     46200     
Matt Moulson   38000     41800     
Tobias Enstrom  42000     46200     
Matt Duchene   18000     19800     
Steven Stamkos  32000     35200     
Sidney Crosby  42000     46200     
Teemu Selanne  10000     11000     
Daniel Alfredsson 10000     11000     
Evgeni Malkin  10000     11000     
Andrew Ladd   20000     22000     
Corey Perry   28000     30800     
Adam Keefe   315000     346500     
Brian Rafalski  20000     22000     
Darren Helm   10000     11000     
Brandon Dubinsky  28000     30800     
Mark Letestu   10000     11000     
Loui Eriksson  20000     22000     
Clarke MacArthur  42000     46200     
Kris Letang   30000     33000     
Pavel Datsyuk  26000     28600     
James Wisniewski  32000     35200     
Nicklas Lidstrom  43000     47300     
Milan Hejduk   18000     19800     
Tyler Ennis   43000     47300     
Paul Martin   38000     41800     
Derek Roy   28000     30800     
Mikko Koivu   10000     11000     
Joe Pavelski   20000     22000     
Joe Thornton   10000     11000     
Phil Kessel   26000     28600     
Alex Ovechkin  18000     19800     

74 rows selected 

这可能是一些比较简单的说我俯瞰,但我没有找到在教科书的参考点类似的事情。任何帮助是极大的赞赏。

+0

@MozenRath请注意,[家庭作业标签现在已被淘汰,不能再使用](http://meta.stackexchange.com/q/147100)。 – Gilles 2013-01-12 16:26:18

+0

ohhk ...谢谢兄弟! – MozenRath 2013-01-14 02:59:08

回答

12

为什么要使用GROUP BY?

SELECT player_name, player_salary, player_salary*1.1 AS NewSalary 
FROM players 
ORDER BY player_salary DESC 
+0

我与SQL Server一起工作,并且有兴趣了解Oracle是否可以在没有GROUP BY的情况下处理查询,因为在SQL Server中,如果查询被省略,查询将不会被解析。 – Tony 2010-11-10 08:28:13

+0

@Tony这里不需要聚合函数。但是不管怎么样,在MSSQL中没有GROUP BY的意思是“将它们全部组合在一起”的聚合函数?但是,它可能不会解析,因为* not-aggregated *字段(这是正确的)。 – AndreKR 2010-11-10 08:36:37

+1

感谢您的回复。你是正确的,聚合函数不是必需的,你提供的SQL实际上在SQL Server中工作,我弄错了。 – Tony 2010-11-11 08:36:01

3

你为什么分组?你的意思是按顺序吗?

SELECT player_name, player_salary, player_salary * 1.1 AS NewSalary 
FROM players 
ORDER BY player_salary, player_name; 
1

您不需要使用GROUP BY,但使用它不会改变结果。只需在最后添加ORDER BY行来对结果进行排序。

SELECT player_name, player_salary, SUM(player_salary*1.1) AS NewSalary 
FROM players 
GROUP BY player_salary, player_name; 
ORDER BY SUM(player_salary*1.1) DESC 
+0

SUM不是必需的,对于每个玩家你都增加一个值。如果每个球员有多个记录,那么你可以使用总和.... – Leslie 2010-11-10 15:09:18

+0

我知道这一点。我刚刚给了上面的代码作为替代答案(我只添加了最后一行)。获取的结果是相同的。 – 2010-11-10 15:20:06

0

这就是:

select player_name, player_salary, (player_salary * 1.1) as player_newsalary 
from player 
order by player_name, player_salary, player_newsalary desc 

你并不需要“GROUP BY”如果只有一个表中的玩家的实例。

+1

按球员薪水降序排列,它首先命令Z-A在球员姓名上。 – Mauro 2010-11-10 08:25:32

+0

是的。其他颜色参数适用于玩家姓名或/和玩家薪水不唯一的情况。 – Tebo 2010-11-10 08:45:02