我期待着一直做足球桌。
我用来表:
查询是
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,3,4 ......
我所有的尝试都没有成功。一些帮助? :)
答案 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