代码之家  ›  专栏  ›  技术社区  ›  Toleo

按特定订单和特定行值排序记录

  •  0
  • Toleo  · 技术社区  · 7 年前
      Name     | Faction     |   Score
    ----------------------------------------
      Alpha    | Viva        |   7000
      Beta     | Rico        |   8000
      Bravo    | Morgan      |   9000
      Active   | Rico        |   10000
      Delta    | Edison      |   11000
      Siphon   | Viva        |   12000
      Taximus  | More        |   13000
      Ariticus | Viva        |   14000
      Ariticus | Havoc       |   15000
    

    从这个表中,我试图按特定的 Faction 先s,然后继续 Score DESC 如下所示 [他们都是 type=all ]

    SELECT Name, Score FROM memebers WHERE type = all GROUP BY id ORDER BY Faction = 'Viva' DESC, Faction = 'Rico' DESC, Score DESC

    我希望得到的是

      Name     | Faction     |   Score
    ----------------------------------------
      Ariticus | Viva        |   14000
      Siphon   | Viva        |   12000
      Alpha    | Viva        |   7000
      Active   | Rico        |   10000
      Beta     | Rico        |   8000
      Ariticus | Havoc       |   15000
      Taximus  | More        |   13000
      Bravo    | Morgan      |   9000
    

    但我一直在按 分数说明 只有

    2 回复  |  直到 7 年前
        1
  •  5
  •   Vamsi Prabhala    7 年前

    使用 case 表示

    ORDER BY case when Faction = 'Viva' then 1
                  when Faction = 'Rico' then 2
             else 3 end,
    Score DESC
    
        2
  •  1
  •   Vash    7 年前

    对于mysql,您也可以尝试 ORDER BY FIELD() 如果势力值列表很小,可以在参数中提供,如下所示:

    SELECT Name, Score 
    FROM memebers 
    WHERE type = all 
    GROUP BY id 
    ORDER BY FIELD(Faction, 'Viva', 'Rico', 'Havoc', 'More','Morgan'), Score DESC;