2015-03-17 2 views
0
SELECT `player`,`kills`,`deaths` FROM `stats` ORDER BY `kills` DESC LIMIT 0 , 10 

как сделать ORDER BY для Самое большое значение из формулы (Убито/СМЕРТИ)MySQL Order By Column1/Столбец2

благодаря

--------------------------- 
| player | kills | deaths | 
--------------------------- 
| user1 | 20 | 2  | 
--------------------------- 
| user2 | 10 | 2  | 
--------------------------- 
| user3 | 30 | 2  | 
--------------------------- 

Соотношение KDR = убийство смерти = Убийств/Смертей

поэтому заказ результата, подобный этому

1. user3 = 15 

2. user1 = 10 

3. user2 = 5 
+0

Можете ли вы добавить примеры данных и ожидаемый результат для объяснения? – Jens

+0

уже обновлено, я не знаю, как сделать таблицу в stackoverflow – anonprophet

ответ

1

Вот решение вашей проблемы:

SELECT `player`,`kills`,`deaths`,`assist` 
FROM `stats` 
ORDER BY (
    CASE WHEN `kills` > `deaths` THEN `kills` ELSE `deaths` 
) 
DESC LIMIT 0 , 10 

Хитрость заключается в том, чтобы использовать CASE заявление для выбора большего из двух столбцов 'kills' или 'deaths' для упорядочивания результатов.

0

Ну, я думаю, вы хотите также показать k_d_ratio как значение, поэтому я бы предложил это решение.

SELECT `player`,`kills`,`deaths`,`assist`, ISNULL 
    (kill /(NULLIF(deaths,0), 
     99999999999) 
    as k_d_ratio FROM stats 
    ORDER BY `k_d_ratio` DESC LIMIT 0 , 10 
+1

Как вы справитесь с случаем, когда 'deaths' окажется равным нулю для данной записи? –

+0

Вы правы, не знаете, как я мог это пропустить. –

+0

Исправлено. Теперь, если deaths = 0, мы будем использовать null для devision. Раздел с нулевым значением возвращает null. Если деление дает null, мы устанавливаем возвращаемое значение в 99999999999. (Выбрал его по предположению, что он всегда будет высоким значением и способен представлять бесконечность.) Не самое приятное решение, но должно работать. –