为了以HTML格式更新锦标赛表,请执行以下查询:
SELECT p.pname,
team,
won,
tie,
lost,
goals,
goalsa
FROM player p,
stats s
WHERE p.tid = s.tid
AND p.pname = s.pname
AND p.tid = 23
AND p.groupno = 'A'
ORDER BY s.won,
s.tie,
( s.goals - s.goalsa ),
s.goals,
p.pname DESC
表播放器的格式为
player (PName, TID, DraftNo, groupNo, team)
表格统计表格
stats(won, tie, lost, goals, goalsA, PName, TID)
目前,在统计数据中,以下条目与查询相关
0 0 0 0 0 a 23
0 0 0 0 0 c 23
0 0 0 0 0 e 23
1 0 0 2 1 g 23
0 0 1 1 2 i 23
这意味着玩家g以2比1击败了玩家。
现在,无论我为ORDER BY
还是DESC
指定ASC
选项,我都会得到以下结果:
i Türkei 0 0 1 1 2
(...)
g Italien 1 0 0 2 1
与所需要的完全相反。为什么会这样?我的查询中有错误吗?显然,我想从最多分数的球员那里订购统计数据。
答案 0 :(得分:3)
ASC
或DESC
关键字仅适用于ORDER BY
旁边的列,因此您按p.pname
而不是按目标执行降序排列。例如,如果您打算执行DESC
之类的聚合,则需要将goals
应用于won
以及应排序更高的所有其他列(SUM(won)
)。< / p>
ORDER BY s.won,
s.tie,
( s.goals - s.goalsa ),
s.goals DESC,
p.pname
关于您的加入方法的注释...您正在使用隐式内连接,方法是在FROM
子句中提供以逗号分隔的列表,并在WHERE
子句中提供条件
FROM player p,
stats s
WHERE p.tid = s.tid
建议使用明确的INNER JOIN
代替。语法更现代,通常更容易阅读。然而,这两者在功能和性能上是等价的。
FROM player p
INNER JOIN stats s ON p.tid = s.tid
答案 1 :(得分:1)
在排序中的每个字段后都需要DESC或ASC:
ORDER BY s.won DESC, s.tie DESC, ...