1
SELECT *,`kills`-`deaths` as x FROM `users` ORDER BY `x` DESC LIMIT 0,50;

テーブル:

user|kills|deaths
a   | 10  | 9
b   | 11  | 9
c   | 0   | 0
d   | 0   | 0
e   | 0   | 0
f   | 1   | 5

出力は次のようになります。

b | 2
a | 1
c | 0
d | 0
e | 0
f | -4

次のような出力が必要です。

b | 2
a | 1
f | -4
c | 0
d | 0
e | 0

ユーザーはアクティブであり、彼にはキルとデスがあるため、他のユーザーは非アクティブであるため、下に移動します。

どうやってするの ?

4

3 に答える 3

2
SELECT *, kills-deaths as x 
FROM users 
ORDER BY x = 0, x DESC LIMIT 0,50;

SqlFiddle

于 2013-03-20T19:58:25.380 に答える
0

私の通常の簡単な解決策は、group byを使用することです

SELECT user,`kills`-`deaths` as x 
FROM `users` 
group by user 
ORDER BY `x` DESC 
LIMIT 0,50;

ここでは、次のこともできます

SELECT user,`kills`-`deaths` as x 
FROM `users` 
ORDER BY `kills`-`deaths` DESC 
LIMIT 0,50;

group by を使用して、計算が 1 か所でのみ行われ、一貫性があるようにします。

于 2013-03-20T20:08:02.013 に答える
0

アクティビティのメジャーをorder by句に追加するだけです。

SELECT *, (kills-deaths) as x 
FROM users 
ORDER BY ((kills+deaths) <> 0), x DESC 
LIMIT 50 OFFSET 0
于 2013-03-20T19:58:13.367 に答える