2015-05-14 12 views
-1

мне нужен набор результатов, как это:MySql: расширенная сортировка 1-й строки до самой высокой, а затем самой низкой и самой высокой?

First Last Amount 
Bob Nolan 789 
Bob Nolan 0 
Bob Nolan 23 
Bob Nolan 55 
Mavis Li 3030 
Mavis Li 0 
Mavis Li 213 
Mavis Li 449 

Первая запись о человеке, всегда должен дать мне самое большое количество, то второй и так далее должны дать мне от самого низкого до самого высокого.

Как бы я сортировал это?

Благодаря

+1

Что делать, если у вас есть 2 записи с одинаковым максимальным значением? например, 2 записи с 'Bob Nolan 789'? – Alex

+0

Можете ли вы подробно остановиться на требованиях? Я не понимаю, как все Боб Ноланс отсортированы. – Mureinik

+0

Привет @alex, что было бы невозможно в нашей системе. Первая запись человека - это фактически их валовая заработная плата. 2-й и т. Д. Фактически являются налогами, которые они платят за эти брутто-зарплаты. Первая запись человека всегда будет иметь максимальное максимальное значение. вторая, третья, четвертая, пятая запись человека всегда будет идти от самого низкого к самому высокому. –

ответ

3

Ваш комментарий:

Первая запись о человеке, на самом деле их валовые зарплаты. Второй и т. Д. Фактически являются налогами, которые они платят от этих валовых .

Почему бы не добавить столбец для типа транзакции, а затем использовать этот столбец в своем роде?

Update - посвященный Alex

Для того, чтобы мой ответ более "answery", запрос будет что-то вроде:

select * 
    from yourTable 
    order by 
    firstName, 
    lastName, 
    IF(transactionType='grossWages', 0, 1), 
    amount; 
+0

Даже если мне нравится ваш комментарий, он по-прежнему комментирует - не ответ, извините, приятель :-) – Alex

+0

@alex Ответ обновлен и посвящен вам;) – Briguy37

+0

:-) гораздо лучше сейчас, – Alex

3

Если вы совершенно не можете изменить структуру ...

SELECT t1.* 
    FROM table t1 
    JOIN (
     SELECT first, last, MAX(amount) max 
     FROM table 
    GROUP BY first, last 
     ) t2 
     ON t2.first = t1.first 
    AND t2.last = t1.last 
ORDER BY t1.first, 
     t2.last, 
     t1.amount = t2.max DESC, 
     t1.amount  

Я бы серьезно подумал о добавлении столбца для отображения типа транзакции.

В стороне .. налоги являются предположительно негативными транзакциями, поэтому знак минуса перед ними позволит вам ORDER BY first, last, amount DESC.

1

Пожалуйста, измените название таблицы соответствующим образом.

select * from so_30240116 a where 
a.amount=(
select max(b.amount) from so_30240116 b 
where a.first=b.first and a.last=b.last group by b.first, b.last 
) 
union 
select * from so_30240116 a where 
a.amount!=(
select max(b.amount) from so_30240116 b 
where a.first=b.first and a.last=b.last group by b.first, b.last 
) 
order by first,last 
Смежные вопросы