现在玩到5级的玩家也会被列入4级,3级,2级和1级。这正是我不想要的。 如果一名球员已经打到5级,我希望他只能在第5级的行上计算,依此类推。
怎么做?
例如,这就是我得到的:
level stopped_playing
101 2632
102 1206
103 970
104 920
这就是我想要的:
level stopped_playing
101 1426
102 236
103 50
104 920
920名玩家达到104级(当然因此打了101级)并且在那里停止了,1426只玩了101级并且已经停在那里。 但在结果中我得到达到等级4的920也计入101级。
如何避免?
答案 0 :(得分:0)
做这样的事情(适应你的实际表格):
select stopped_level, count(player) from (
select player, max(level) as stopped_level
from whatever_your_tables_are
group by player
)
group by stopped_level
注意:将来列出您的表格及其结构会很有帮助。此外,最好提及您使用的SQL品牌,因为它们都具有不同的功能。
答案 1 :(得分:0)
考虑到你的表结构的粗略想法将是
Select Level, count(*)
from (select player, max(Level) as 'Level'
from table group by player) group by Level;
希望这有帮助
答案 2 :(得分:0)
您尚未提及您的RDBMS。使用窗口函数可以轻松解决问题,这些函数存在于PostgreSQL,ORACLE,DB2,SQL Server 2012,Teradata,Sybase和Vertica中。
以下查询在PostgreSQL上测试(也在SQL Fiddle上):
SELECT *,
stopped_playing - lag(stopped_playing,1,0)
OVER (ORDER BY level DESC) wanted
FROM tab
ORDER BY level;
答案 3 :(得分:0)
这是一个很棒的窗口函数应用程序。假设最高级别是最高级别,请尝试:
select maxlevel, COUNT(*) as Stopped_Playing
from (select t.*,
MAX(level) over (partition by playerid) as maxlevel
from t
) t
group by maxlevel
order by maxlevel