2012-01-26 15 views
1
SELECT userid,SUBSTRING_INDEX(SUBSTRING_INDEX(data, '\"!', -1), '!\"', 1)+0 AS num 
FROM table 
WHERE type=2 
ORDER BY num DESC LIMIT 5 

これは、x!文字列で数値を返し、その数値で行を並べ替えようとします。それはうまく動作します。グループで正しく注文されていない行by

ただし、ユニークなユーザーIDを返す方法はわかりません。

ユーザーID、ORDER BYを追加すると、NUMで注文せずに行を返します。

SELECT userid,SUBSTRING_INDEX(SUBSTRING_INDEX(data, '\"!', -1), '!\"', 1)+0 AS num 
FROM table 
WHERE type=2 
GROUP BY userid 
ORDER BY num DESC LIMIT 5 

個別のいずれかに動作しません:

SELECT DISTINCT(userid),SUBSTRING_INDEX(SUBSTRING_INDEX(data, '\"!', -1), '!\"', 1)+0 AS num 
FROM table 
WHERE type=2 
ORDER BY num DESC LIMIT 5 

私はアイデアをしています。..

例:

id userid  data 
1  56  !100! 
2  22  !90! 
3  56  !200! 

結果は次のようになります。

userid  num 
56   200 
22   90 
+0

は、各ユーザーIDに対して複数の可能な結果がありますか?もしそうなら、 'DISTINCT'は必要なものを与えません。各ユーザーIDに対して複数のレコードのうちどれを返すべきかを選択する基準は何ですか? –

+0

同じユーザーIDを持つ複数の行がありますが、ユーザーIDは2回返されません。最高のnumを持つ一意のユーザーIDが返されます。 – domino

+0

@Michaelはメインの投稿に例を追加しました。 – domino

答えて

2
SELECT userid,MAX(num) num FROM 
(SELECT userid,SUBSTRING_INDEX(SUBSTRING_INDEX(data, '\"!', -1), '!\"', 1)+0 AS num 
FROM table 
WHERE type=2) A 
GROUP BY userid; 
関連する問題