2

为了更新 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 战胜了玩家 i。

现在,无论我是否指定orORDER BY选项,我都会得到以下结果:DESCASC

i    Türkei    0    0     1     1     2
(...) 
g    Italien   1    0     0     2     1

这与所需的完全相反。为什么会这样?我的查询有错误吗?显然,我想从得分最多的玩家到得分较少的玩家排序。

4

2 回答 2

3

ASCorDESC关键字仅适用于它放在旁边的列,因此您正在按目标而不是目标ORDER BY进行降序。p.pname您需要应用DESCtogoals和所有其他应该排序较高的列 ( won),例如,如果您打算进行聚合,例如SUM(won).

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
于 2013-01-24T17:03:11.990 回答
1

在排序的每个字段之后都需要 DESC 或 ASC:

ORDER BY s.won DESC, s.tie DESC, ...
于 2013-01-24T17:09:52.087 回答