2016-06-15 6 views
0

Gold(3)、Silver(2)、Bronze(1)の数値を測定することによって得られたメダルの数に基づいて、次の表からMySQLでのランク付けと重み付けに基づく選択

+-----------+-------------+--------+-----------------+----------------------------+-------------------------------+-----------------------------------------+---------------------------------+-------------------------+ 
| idRESULTS | STATUS  | MEDALS | EVENTS_idEVENTS | EVENTS_ATHLETES_idATHLETES | EVENTS_ATHLETES_TEAMS_idTEAMS | EVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRY | EVENTS_VARIOUS_SPORTS_SPORTS_ID | awarded_medals_medal-id | 
+-----------+-------------+--------+-----------------+----------------------------+-------------------------------+-----------------------------------------+---------------------------------+-------------------------+ 
| results1 | DID-NOT-WIN | SILVER | TEN    | MS       | RUS-WTA      | RUS          | WOMENS_TENNIS     |      2 | 
| results1 | WON   | GOLD | TEN    | VW       | USA-WTA      | USA          | WOMENS_TENNIS     |      3 | 
| results2 | DID-NOT-WIN | BRONZE | ATH    | JG       | USA-TF-MEN     | USA          | TRACK-AND-FIELD     |      3 | 
| results2 | WON   | GOLD | ATH    | UB       | JAM-TF-MEN     | JAM          | TRACK-AND-FIELD     |      1 | 
| results3 | WON   | GOLD | TEN-DOUBLE  | SW       | USA-WTA      | USA          | WOMENS_TENNIS     |      3 | 
| results3 | WON   | GOLD | TEN-DOUBLE  | VW       | USA-WTA      | USA          | WOMENS_TENNIS     |      1 | 
+-----------+-------------+--------+-----------------+----------------------------+-------------------------------+-----------------------------------------+---------------------------------+-------------------------+ 

私はこのコードを以下に示しますが、これは期待される出力を生成しませんか?

select EVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRY,MEDALS 
from results 
group by EVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRY 

答えて

0

これを試してみてください!

select EVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRY, rank() over (Order by Score desc) as Ranking 
from 
(
    select EVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRY, sum(
     case when MEDALS='GOLD' then 3 --assigning gold a value of 3 
     when MEDALS='SILVER' then 2 --assigning silver a value of 2 
     when MEDALS='BRONZE' then 1 --assigning bronze a value of 1 
     end) as Score 
    group by 1 
) Scores 

あなたが最初のものでやっていた主要なものだけでスコアを割り当てることはないEVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRYとメダルのすべてのユニークなコンボを、引っ張りました。個別にランク付けすることに興味がある場合は、それに応じて値を変更することができます。

+0

このコードはうまくいくようですが、何とか実行すると構文エラーが出ますか?私はmysqlを使用していますか? – blueGOLD

+0

あなたはグループ内でEVENTS_ATHLETES_TEAMS_COUNTRY_IDCOUNTRYが必要だと思います。 – Kostya

+1

コンパイラは、構文エラーを「順位(順位順)」の近くに表示していますか? – blueGOLD

関連する問題