足球/运动在mysql中的所有时间表

时间:2014-09-01 15:51:51

标签: mysql sql


我期待着一直做足球桌。
我用来表:

  • 团队:有关俱乐部的信息:身份证,姓名,团队实际姓名
  • FinalTables:所有决赛桌,逐季逐层逐级

查询是

SELECT
    t.team Team,
    SUM(CASE WHEN (f.TeamActualName = t.team) THEN 1 ELSE 0 END) Seasons,
    SUM(CASE WHEN (f.TeamActualName = t.team) THEN f.utakmica ELSE 0 END) P,
    SUM(CASE WHEN (f.TeamActualName = t.team) THEN f.pobjede ELSE 0 END) W,
    SUM(CASE WHEN (f.TeamActualName = t.team) THEN f.nerješeni ELSE 0 END) D,
    SUM(CASE WHEN (f.TeamActualName = t.team) THEN f.porazi ELSE 0 END) L,
    SUM(CASE WHEN (f.TeamActualName = t.team) THEN f.postigao ELSE 0 END) GF,
    SUM(CASE WHEN (f.TeamActualName = t.team) THEN f.primio ELSE 0 END) GA,
    SUM(CASE WHEN (f.TeamActualName = t.team) THEN f.postigao-f.primio ELSE 0 END) GD,
    SUM(CASE WHEN (f.TeamActualName = t.team) THEN f.bodovi ELSE 0 END) Points

FROM
    FinalTables AS f,
    Teams AS t

WHERE
    f.level = 1

GROUP BY
    t.id

ORDER BY
    Points DESC,
    GD DESC,
    GF DESC,
    Team ASC

此查询效果很好。

我有两个问题。

  1. 首先在团队表中列出所有在独立的级别玩的俱乐部,在所有时间表中我也接受了零游戏的俱乐部。例如,并非所有球队都在第一级比赛,所以其他球队都没有比赛。如何避免它,所以只能在第一级玩至少一场比赛的俱乐部接收桌子,例如。

  2. 第二个问题是如何添加第一列订单号。所以谁拥有大多数积分是“1”,并且结束,2,3,4 ......

  3. 我所有的尝试都没有成功。一些帮助? :)

1 个答案:

答案 0 :(得分:0)

首先,我知道这不是你的问题,但你已经以非常有创意的方式完成了f和t之间的联接。

其次,我将假设每个团队都列在Teams表中。我在理解你的#1问题时遇到了一些麻烦,但是如果不是这样,那应该是。在FinalTables上还应设置一个外键,以强制其中列出的任何团队也必须在团队中。

第三,我不是专门针对MySql的专家,但谷歌花了很少的时间来解答你的排名问题。我将链接到一个(Rank function in MySQL)并在下面的答案中实现其建议,但我无法测试它。我猜你得到的任何挫折与缺乏研究尝试有关。不要让它劝阻你 - 当我们陷入困境时,我们都来这里寻求答案。

我会像这样重写你的SQL(请记住它可能有拼写错误或者可能需要调整 - 我无法在MySql安装上自行测试它):

SELECT
    t.team Team,
    COUNT(*) Seasons,
    SUM(f.utakmica) P,
    SUM(f.pobjede) W,
    SUM(f.nerješeni) D,
    SUM(f.porazi) L,
    SUM(f.postigao) GF,
    SUM(f.primio) GA,
    SUM(f.postigao-f.primio) GD,
    SUM(f.bodovi) Points,
    @curRank := @curRank + 1 AS rank
FROM
    Teams AS t, 
    (SELECT @curRank := 0)
    LEFT JOIN FinalTables AS f on f.TeamActualName = t.team
WHERE
    f.level = 1
GROUP BY
    t.id
ORDER BY
    Points DESC,
    GD DESC,
    GF DESC,
    Team ASC