2012-03-23 3 views
0

Я пытаюсь сделать какое-то «сверху» для некоторых игрового stadisticsграф группы с помощью MySQL

таблицы это как этого

mapname  authid country  name time date weapon server 

Я получил этот запрос, я думаю, что это нормально (низшая время на карте это показано)

SELECT name, min(time) AS time 
FROM kz_pro15 
GROUP BY mapname ASC 

и я получаю результаты, как

name time 
Santaaa  907.75 
Zimmek*  184.82 
:d 34.35 
waldoo 1.04 
Epiphany 8.54 
Lovvon 185.51 
Epiphany 64.53 
menqz 73.67 
waldoo 93.97 
KoLkkE 207.83 
q[o__o]p 78.35 
Ulysses gc  T! CS 154.01 
sasuke FTW 151.17 
sasuke FTW 41.62 
Santaaa  80.38 
Santaaa  196.95 
JonyBu 135.56 
tiBU 93.12 
Santaaa  122.04 
Santaaa  36.08 
EzzeqL 149.14 
Zeqqe 106.75 
bondiO^  110.68 
INJUNABLES 102.09 
Sublime  72.15 
Player 106.11 
=(M4t1ttU)=  158.95 
foo conscience 80.98 
gabe 27.21 
gabe 58.5 

Но теперь я пытаюсь подсчитать, что результаты, чтобы получить сколько записей делают игрок, перечисленные до имеют

gabe  2 
sublime 1 
player 13 

ответ

2

Если name не зависит от mapname, ваш запрос не является правильным:

SELECT name, min(time) AS time 
FROM kz_pro15 
GROUP BY mapname ASC 

Он покажет MIN(time) за каждые mapname, но нет гарантии, что он покажет соответствующие name с минимальным временем.

Используйте это вместо того, чтобы (и заметьте подзапрос):

SELECT k.name 
    , COUNT(*) AS cnt 
FROM kz_pro15 AS k 
    JOIN 
    (SELECT mapname 
      , MIN(time) AS time 
     FROM kz_pro15 
     GROUP BY mapname 
    ) AS g 
    ON (g.mapname, g.time) = (k.mapname, k.time) 
GROUP BY k.name 
+0

Я собирался упомянуть то же самое :) –

+0

@ypercube, вы правы! Благодаря! – Zuker

+0

@ypercube, как насчет если я хочу, чтобы отобразить лучшие 15 раз для пользовательской MapName ... тот же вопрос, я получил SELECT *, мин (время) \t \t \t ОТ kz_nub15 \t \t \t ГДЕ MapName = ' "$ карта."' \t \t \t GROUP BY имя ASC \t \t \t ORDER BY время ASC \t \t \t LIMIT 15 Но мин (время) это не точное значение – Zuker

3
SELECT name, count(*) 
FROM (
SELECT name, min(time) AS time 
FROM kz_pro15 
GROUP BY mapname ASC 
) AS x 
GROUP BY name 
+0

Thx, я добавил "а х" – Zuker

+0

@Zuker Хороший вызов, фиксированный! –

0

ВЫБРАТЬ имени, мин (время), как время, отсчета (*) AS записей ИЗ kz_pro15 GROUP BY имя ASC