Выбор 100 самых больших значений в таблице с учетом возможных дубликатов

У меня есть таблица со следующей структурой - steamid, itemid, eventid, value , все только целые или большие целые, которые регистрируют почасовые данные, которые я вставляю. Таким образом, у пользователя, скорее всего, есть несколько записей с одинаковыми идентификаторами steam, itemid и даже значениями.

Я пытаюсь получить 100 лучших значений, но один и тот же элемент не должен повторяться.

Что у меня есть до сих пор

SELECT itemid,value,steamid 
FROM $table 
GROUP BY itemid 
ORDER BY value DESC 
LIMIT 0,100

Что дает мне этот набор данных (пример только здесь):

itemid      value   steamid
=================================================
599291414   66397   76561198032389066
779150329   62882   76561198001229760
773965297   51895   76561198014617403
332883551   43201   76561197992659494
333434836   40880   7656119799359013

Однако это по какой-то причине игнорирует истинное наибольшее значение, указанное в таблице. Я не уверен, как еще я могу отформатировать это, чтобы я мог игнорировать повторяющиеся записи с одним и тем же идентификатором элемента и паролем. Я не думаю, что смогу сгруппировать по steamid, потому что тогда будут игнорироваться другие элементы, которые могут быть связаны со steamid.

Вот первые несколько, если я выберу без группировки.

 itemid     value   steamid
 =====================================
 1011809265 753665  76561198010314894
 376615188  101684  76561197989760193
 478937438  83448   76561198010314894
 478937438  83448   76561198010314894
 376662587  72693   76561197989760193
 376662587  72693   76561197989760193
 599291414  66454   76561198032389066
 599291414  66454   76561198032389066
 599291414  66454   76561198032389066

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


person geogaddi    schedule 14.08.2012    source источник
comment
Я не думаю, что вам нужно соединение, не могли бы вы просто обернуть value функциональностью MAX(). т.е. SELECT itemid,max(value),steamid FROM supportContacts GROUP BY itemid ORDER BY value DESC. sqlfiddle.com/#!2/3d711/25   -  person Jeemusu    schedule 14.08.2012


Ответы (2)


Пытаться

SELECT * FROM (

  SELECT itemid,value,steamid FROM $table GROUP BY itemid ORDER BY value DESC
) as tbl1

GROUP BY itemid, value

LIMIT 0,100

Это должен быть уникальный itemid, но тогда вы получите только отдельные значения.

person Jaime Torres    schedule 14.08.2012
comment
Я не думаю, что вам нужно соединение, не могли бы вы просто обернуть value функциональностью MAX(). т.е. SELECT itemid,max(value),steamid FROM supportContacts GROUP BY itemid ORDER BY value DESC - person Jeemusu; 14.08.2012

Попробуйте добавить отличительные.

SELECT DISTINCT itemid, value, steamid 
FROM $table 
ORDER BY value DESC 
LIMIT 0,100
person John Woo    schedule 14.08.2012
comment
Group By на MySql используется для различных - person Jaime Torres; 14.08.2012
comment
Разве это не вернет все строки, потому что вы проверяете различную комбинацию itemid, value, steamid? - person Jeemusu; 14.08.2012
comment
@Jeemusu, что вы ожидаете получить из запроса? Или чего вы хотите добиться? - person John Woo; 14.08.2012
comment
Я не оригинальный ОП, но у меня сложилось впечатление, что он / она спрашивал. - person Jeemusu; 14.08.2012
comment
Вы получите несколько записей itemid, если будете использовать отличные друг от друга таким образом, как я упоминал ранее. Вот скрипт: sqlfiddle.com/#!2/6b9ab/1 - person Jeemusu; 14.08.2012
comment
На самом деле это приводит к повторению нескольких записей одного и того же itemid. Как я могу предотвратить появление нескольких записей с одним и тем же идентификатором элемента в наборе результатов? - person geogaddi; 14.08.2012