Порядок SQL по разным значениям

0

У меня есть таблица со столбцами: имя, категория и оценка. И я хочу заказать их по количеству баллов за каждую категорию, но мне также нужно, чтобы их заказывали по каждой категории:

  1. категория: A, оценка: 25 (наибольший балл в категории A)
  2. категория: B, оценка: 10
  3. категория: C, оценка: 30
  4. категория: A, оценка: 24
  5. категория: B, оценка: 9
  6. категория: C, счет: 29
  7. категория: A, оценка: 23 и т.д....

Есть ли способ использовать ORDER BY для заказа таких результатов? Или я должен использовать пользовательский цикл сортировки позже результата? Спасибо!

  • 1
    Какую версию mysql вы используете? Более поздние версии поддерживают window functions которые могут работать для того, чего вы пытаетесь достичь. Если вы используете более раннюю версию, вы можете использовать user-defined variables для достижения того же.
  • 0
    Вы пробовали ORDER BY category, score DESC ?
Теги:
sorting
sql-order-by

3 ответа

1

Это должно сделать трюк. Я моделировал функцию ROW_NUMBER как вычисленный столбец (разбиение по категориям), а затем просто заказывал результат после нового столбца и категории.

SELECT a.category, a.score, (
    SELECT count(*) from tbl b where a.score <= b.score AND a.category = b.category
) AS row_number
FROM tbl a
order by row_number, category

Вы можете проверить его здесь.

0

Попробуйте этот запрос:

select @cat := '', @rn := 0;
select Category, Score from (
  select case when @cat = Category then @rn := @rn + 1 else @rn := 1 end rn,
         @cat := Category, 
         Category, 
         Score
  from tbl
  order by Category, Score desc
) a order by rn, Category

демонстрация

0

У меня есть идея играть с ASC и DESC

SELECT  name, category, score FROM table ORDER BY category , score DESC

Может быть, это может помочь вам (покажите результаты запросов). Удачи.

Ещё вопросы

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