2013-05-30 5 views
0

J'essaie d'obtenir le score le plus élevé pour un utilisateur particulier à partir de 2 tables différentes.Obtenir la valeur la plus élevée sur 2 tables

Exemple:

Table 1 
{user=>"Dave", score=>8} 
{user=>"Dave", score=>2} 
{user=>"Frank", score=>5} 

Table 2 
{user=>"Bill", score=>5} 
{user=>"Dave", score=>3} 
{user=>"Frank", score=>7} 

Le résultat que je veux obtenir est le score le plus élevé pour chaque utilisateur, commandé par le score descendant.

Dave: 8 Frank: 7 Bill: 5

Je pense peut-être que je dois utiliser map/reduce mais je ne suis pas trop sûr j'ai essayé d'utiliser une table de hachage pour itérer à travers les résultats, mais comme je utilisait le nom comme clé, les valeurs étaient écrasées.

Merci Andrew

Répondre

2

Voici un exemple de la façon d'atteindre votre tri sur le côté Ruby:

> unsorted = [{:user=>"Bill", :score=>5}, {:user=>"Dave", :score=>3}, {:user=>"Frank", :score=>7}] 
=> [{:user=>"Bill", :score=>5}, {:user=>"Dave", :score=>3}, {:user=>"Frank", :score=>7}] 
> unsorted.sort_by { |r| r[:score] }.reverse 
=> [{:user=>"Frank", :score=>7}, {:user=>"Bill", :score=>5}, {:user=>"Dave", :score=>3}] 
-1

vous pouvez le faire dans une requête SQL en joignant les deux tables sur le nom.

SELECT 
    CASE 
     WHEN Table1.score >= Table2.score THEN Table1.score 
     ELSE Table2.score 
    END AS top_score, name 
FROM Table1 join Table2 on Table1.name=Table2.name. 
Questions connexes