У меня есть таблица со столбцами: имя, категория и оценка. И я хочу заказать их по количеству баллов за каждую категорию, но мне также нужно, чтобы их заказывали по каждой категории:
Есть ли способ использовать ORDER BY для заказа таких результатов? Или я должен использовать пользовательский цикл сортировки позже результата? Спасибо!
Это должно сделать трюк. Я моделировал функцию 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
Вы можете проверить его здесь.
Попробуйте этот запрос:
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
У меня есть идея играть с ASC и DESC
SELECT name, category, score FROM table ORDER BY category , score DESC
Может быть, это может помочь вам (покажите результаты запросов). Удачи.
mysql
вы используете? Более поздние версии поддерживаютwindow functions
которые могут работать для того, чего вы пытаетесь достичь. Если вы используете более раннюю версию, вы можете использоватьuser-defined variables
для достижения того же.ORDER BY category, score DESC
?