2017-04-24 4 views
1

私は、genreIdとそのジャンルに関連するランキングに関連付けられた複数のuserIdsを含むテーブルRANKINGSを持っています。MYSQLをジョインすると、同じテーブル+ COUNTでランクを決定します

ベンチマークとしてuserId = 30520を使用しますが、テーブルには多くのレコードが含まれています。

userId genreId ranking 
30520  0   135 
30520  13   91 
30520  24   163 

userIdの位置を手動で計算するのは簡単です。最後のレコードのために:このマニュアルアプローチで

SELECT COUNT(ranking) as position 
FROM rankings 
WHERE genreId = 24 
AND ranking >= 163 
ORDER BY ranking DESC 

、私が取得:

userId genreId ranking position 
30520  0   135  5 
30520  13   91   17 
30520  24   163  7 

しかし、私は、これは1つのクエリで実現することができるか想像することはできません。私の試み:

SELECT userId, a.genreId, COUNT(a.ranking) as position, 
FROM rankings a 
LEFT JOIN 
(
    SELECT genreId, ranking 
    FROM rankings 
    WHERE userId = 30520 
) b 
ON a.genreId = b.genreId 
AND a.ranking >= b.ranking 
ORDER BY a.ranking DESC 

私は一列のみを取得:

userId genreId position 
30520  0   3741 

は、任意のヒントをありがとう!

答えて

0

ちょうどあなたのクエリにしてグループを追加します。

SELECT userId, a.genreId, COUNT(a.ranking) as position 
FROM rankings a 
LEFT JOIN 
(
    SELECT genreId, ranking 
    FROM rankings 
    WHERE userId = 30520 
) b 
ON a.genreId = b.genreId 
AND a.ranking >= b.ranking 
GROUP BY genreId 
ORDER BY a.ranking DESC 
+1

私は少しお返事を編集した:今、それは:-) THXの作品 – fab

関連する問題