代码之家  ›  专栏  ›  技术社区  ›  Matthew Barbara

提前查询-选择、按条件求和并返回累计值

  •  -2
  • Matthew Barbara  · 技术社区  · 7 年前

    用户预测给定比赛的团队赢家。根据预测的团队以及预测是否正确,将根据所选团队的赔率授予不同的分数。考虑下面两个SQL表及其字段。

    Matches table

    和

    enter image description here predictions.team_id matches.match_winner )比赛ID为30。最终结果应该是这样的

    enter image description here

    马修预测正确匹配5和7(赔率3.4+2.4),总得分为5.8分。

    2 回复  |  直到 6 年前
        1
  •  2
  •   GMB    7 年前

    将聚集查询与条件查询一起使用 SUM

    SELECT
        p.username,
        SUM(CASE WHEN m.match_winner = m.team_a THEN m.team_a_odds ELSE m.team_b_odds END)
    FROM 
        predictions p
        INNER JOIN matches m
            ON p.match_id = m.id AND p.team_id = m.match_winner
    WHERE p.tournament_id = 30
    GROUP BY p.username
    
        2
  •  1
  •   Derviş Kayımbaşıoğlu    7 年前
    SELECT
      USERNAME,
      SUM(IF(CASE WHEN MATCH_WINNER = TEAM_A, TEAM_A_ODDS, TEAM_B_ODDS))
    FROM
      PREDICTIONS
    INNER JOIN MATCHES
      ON MATCH_ID = MATCHES.ID AND 
        TEAM_ID = MATCH_WINNER
    GROUP BY USERNAME;
    

    但是自从 Neville predicted correctly match 7 and 9 (odds 2.4 + 2.0), total 4.4 points

    SELECT
      USERNAME,
      SUM( TEAM_B_ODDS)
    FROM
      PREDICTIONS
    INNER JOIN MATCHES
      ON MATCH_ID = MATCHES.ID AND 
        TEAM_ID = MATCH_WINNER
    GROUP BY USERNAME;
    

    Naville