Записи заказов по определенному заказу с определенными значениями строк

0
  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, Затем продолжайте с помощью Score DESC как 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

Но я продолжаю получать их по заказу только по Score DESC.

Теги:

2 ответа

5
Лучший ответ

Используйте выражение case.

ORDER BY case when Faction = 'Viva' then 1
              when Faction = 'Rico' then 2
         else 3 end,
Score DESC
1

Для 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;
  • 0
    Это работает, но некоторые имена фракций сделаны только из Number, как 1412 что плохо сочетается с функцией

Ещё вопросы

Сообщество Overcoder
Наверх
Меню