MySQL ORDER BY(DESC | ASC)获得相同的结果

时间:2013-01-24 16:58:51

标签: mysql sql-order-by

为了以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

与所需要的完全相反。为什么会这样?我的查询中有错误吗?显然,我想从最多分数的球员那里订购统计数据。

2 个答案:

答案 0 :(得分:3)

ASCDESC关键字仅适用于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, ...