另一个表中的元组排名

时间:2017-03-05 13:47:13

标签: sql vertica

所以我有2张桌子,A队和B队,他们的分数。我希望使用SQL或vertica在团队B中的团队A的每个成员的得分等级,如下所示

 Team A Table

user   score
-------------   
asa      100        
bre      200     
cqw      50      
duy      50      




Team B Table

user   score 
------------  
gfh      20       
ewr      80     
kil      70      
cvb      90  

输出:

Team A Table

user   score   rank in team B
------------------------------ 
asa      100     1   
bre      200     1
cqw      50      4
duy      50      4

2 个答案:

答案 0 :(得分:0)

简单相关查询应该:

select 
    a.*,
    (select count(*) + 1 from table_b b where b.score > a.score) rank_in_b
from table_a a;

您需要做的就是计算表b中得分高于当前用户的人数,并为其添加1以获得排名。

答案 1 :(得分:0)

试试这个 - 这只适用于Vertica。

WITH -- input, don't use in query itself table_a (the_user,score) AS ( SELECT 'asa',100 UNION ALL SELECT 'bre',200 UNION ALL SELECT 'cqw',50 UNION ALL SELECT 'duy',50 ) , table_b(the_user,score) AS ( SELECT 'gfh',20 UNION ALL SELECT 'ewr',80 UNION ALL SELECT 'kil',70 UNION ALL SELECT 'cvb',90 ) -- end of input - start WITH clause here , ranked_b AS ( SELECT RANK() OVER(ORDER BY score DESC) AS the_rank , * FROM table_b ) SELECT a.the_user AS a_user , a.score AS a_score , b.the_rank AS rank_in_team_b FROM table_a a LEFT JOIN ranked_b b ON a.score INTERPOLATE PREVIOUS VALUE b.score ORDER BY 1 ; a_user|a_score|rank_in_team_b asa | 100| 1 bre | 200| 1 cqw | 50| 4 duy | 50| 4 是特定于Vertica的外连接谓词,它连接非相等列上的两个表,使用外连接表中的“最后已知”值使匹配成功。

c.send(b'Thank you for connecting')