Mysql: ЗАКАЗАТЬ дважды

0

EDITED: мне нужно, чтобы пользователи упорядочивались по их глобальной прогрессии [порядок по avg (progression) DESC] и строкам деталей orderd по прогрессии.

Пример:

USER 1 campaign 1 progression 100 
USER 1 campaign 2 progression 100
USER 2 campaign 1 progression 95 
USER 2 campaign 2 progression 80
USER 3 campaign 1 progression 70 
USER 3 campaign 2 progression 25

Я запускаю следующий запрос:

SELECT p.usersid, p.current_campaign, p.campaign_progression
FROM progression_campagne p 
JOIN USER u ON  p.usersid=u.id AND u.organismsid=10 
GROUP BY p.usersid, p.current_campaign
ORDER BY p.usersid DESC,p.campaign_progression DESC;

Чтобы получить такой результат:

Изображение 174551

Но я получил следующий результат:

Изображение 174551

Любая помощь?

Теги:
subquery
sql-order-by

1 ответ

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

Добавьте средний столбец и используйте это как первый столбец сортировки

drop table if exists t;
create table t(user int, campaign int , progression int);
insert into t values
(1 , 1 , 100) ,
(1 , 2 , 100),
(2 , 1 , 95 ),
(2 , 2 , 80),
(3 , 1 , 70 ),
(3 , 2 , 25);

select user,campaign, progression, (select avg(t1.progression) from t t1 where t1.user = t.user group by t1.user) average
from t
order by average desc,user desc,progression desc;

+------+----------+-------------+----------+
| user | campaign | progression | average  |
+------+----------+-------------+----------+
|    1 |        1 |         100 | 100.0000 |
|    1 |        2 |         100 | 100.0000 |
|    2 |        1 |          95 |  87.5000 |
|    2 |        2 |          80 |  87.5000 |
|    3 |        1 |          70 |  47.5000 |
|    3 |        2 |          25 |  47.5000 |
+------+----------+-------------+----------+
  • 0
    спасибо за ваш отличный ответ, мне понадобится ваша помощь в переводе его на HQL (Hibernate Query langage), пожалуйста.
  • 0
    Никогда не использовал HQL, но я предполагаю, что это будет примерно так же.
Показать ещё 1 комментарий

Ещё вопросы

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