2016-07-10 2 views
2

У меня есть таблица mySQL, содержащая несколько записей от нескольких пользователей (идентифицированных идентификатором пользователя). Полная строка содержит идентификатор пользователя, местоположение, вид и вес. Я хочу иметь таблицу лидеров, содержащую самый тяжелый вес и соответствующее местоположение для каждого пользователя для определенного вида.Создание таблицы лидеров из таблицы mySQL

Я пробовал:

SELECT userid, location, f_weight_i FROM eac.catches WHERE f_weight_i = (SELECT MAX(f_weight_i) FROM eac.catches) AND species='32' GROUP BY userid ORDER BY f_weight_i 

но он не возвращает ни одной строки.

Я также попробовал это, и он вернулся общий лучший вес:

SELECT userid, location, f_weight_i FROM eac.catches WHERE f_weight_i = (SELECT MAX(f_weight_i) FROM eac.catches) 

Как я могу получить лучшие веса для каждого пользователя, для каждого вида?

+0

Определить «лучший» .. – Strawberry

+0

«лучший» = максимальный вес. –

+0

Ах, «самый тяжелый». – Strawberry

ответ

0

Вы можете использовать вложенные (MySQL называет его производной таблицей), чтобы получить максимальную f_weight_i для каждого пользователя для данного вида.

Затем присоедините результат от этого к столу, чтобы получить всю строку.

Как это:

SELECT c.userid 
     , c.species 
     , c.location 
     , c.f_weight_i 
    FROM eac.catches c 
    JOIN ( 
      SELECT w.userid 
       , w.species 
       , MAX(w.f_weight_i) AS max_f_weight_i 
      FROM eac.catches w 
      WHERE w.species = '32' 
      GROUP BY w.userid, w.species 
     ) m 
     ON m.max_f_weight_i = c.f_weight_id 
    AND m.userid   = c.userid 
    AND m.species  = c.species 
    ORDER BY c.f_weight_i DESC 

Чтобы получить результаты для всех видов, удалите условие WHERE из запроса вида рядный (производный таблицу m).

+0

Я чувствую, что внутренний запрос - это все, что ему нужно. – Kinetic

+0

@ KiNeTiC иногда чувства могут быть такими, как – Strawberry

+0

@KiNeTic: встроенный просмотр получает максимальный вес. Но это не получает значение столбца 'location' из этой строки с максимальным весом. Если OP не нужно использовать столбец «location», то запрос на встроенный просмотр будет достаточным. – spencer7593

0

У меня нет времени на создание тестового стола, но это должно вас закрыть.

SELECT userid, location, species, f_weight_i 
FROM eac.catches INNER JOIN 
    (SELECT userid, species, MAX(f_weight_i) AS f_weight_i 
    FROM eac.catches GROUP BY userid, species) AS tmp 
ON eac.catches.userid = tmp.userid 
    AND eac.catches.species = tmp.species 
    AND eac.catches.f_weight_i = tmp.f_weight_i; 
Смежные вопросы