【问题标题】:Selection based on Ranking and Weighting in MySQLMySQL中基于排序和加权的选择
【发布时间】:2016-06-15 21:48:40
【问题描述】:

我如何通过测量下表中的金(3)、银(2)、铜(1)的数量,根据获得的奖牌数量来选择国家排名:

+-----------+-------------+--------+-----------------+----------------------------+-------------------------------+-----------------------------------------+---------------------------------+-------------------------+
| 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

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    试试这个!

    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 和 MEDALS 的所有独特组合,这不会分配分数。如果您有兴趣分别按每个排名,您可以相应地更改案例中的值。

    【讨论】:

    • 这段代码看起来不错,但不知何故我在运行时遇到语法错误?我正在使用 mysql?
    • 我认为你需要 EVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRY 在 group by
    • 编译器将语法错误列为接近'over (Order by Score desc) as Ranking'?
    猜你喜欢
    • 2011-04-08
    • 1970-01-01
    • 2015-07-01
    • 2013-04-20
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多