2017-08-17 48 views
0

我正在創建一個簡單的遊戲,我想獲得最好的lap_time每個類型在分貝。
但是,我的查詢返回錯誤的player_id(第二行3)和total_ranks(所有級別而不是按類型計數)。是否有可能使此查詢正常工作?

鏈接sqlfiddle:http://sqlfiddle.com/#!9/a0c36a/2

期望的結果

+--------+-----+-------+------------+----------------+-------------+ 
| level | cp | type | player_id | MIN(lap_time) | total_ranks | 
+--------+-----+-------+------------+----------------+-------------+ 
|  1 | 1 | 0 |   1 |   10.5 |   4 | 
|  1 | 1 | 1 |   2 |   10.45 |   3 | 
+--------+-----+-------+------------+----------------+-------------+ 

是否有可能使其在1個查詢工作或做我需要至少2?

+0

你是什麼意思與player_id(第二行3)? – Noob

+1

@Noob看到SQLFiddle。 OP應該真的把相關的代碼和輸出在問題本身,雖然 – ADyson

回答

2

Fiddle

相同的概念作爲添,但Total_Ranks列

SELECT level, cp, R.type, player_id, MinTime, Total_Ranks 
FROM runtimes R 
JOIN (SELECT TYPE, MIN(LAP_TIME) MinTime, Count(*) Total_Ranks 
     FROM RUNTIMES 
     GROUP BY TYPE) T on R.Type = T.Type 
         and R.lap_time = T.MinTime 
WHERE level=1 
AND cp=1 
2

在MySQL中解決這個問題的一個典型方法是使用子查詢來確定每種類型的最小單圈時間。然後加入你的完整表格以獲得整個記錄。請注意,這種方法的一個很好的副作用是,如果某個給定類型的人有多個人共享最小單圈時間,我們也會得到回合。

SELECT r1.*, r2.total_ranks 
FROM runtimes r1 
INNER JOIN 
(
    SELECT type, MIN(lap_time) AS min_lap_time, COUNT(*) AS total_ranks 
    FROM runtimes 
    GROUP BY type 
) r2 
    ON r1.type  = r2.type AND 
     r1.lap_time = r2.min_lap_time 

下面是更新後的小提琴鏈接:

SQLFiddle

+0

不錯,但你忘了total_ranks。 – exexe