2013-06-27 4 views
1

Я довольно новичок в использовании SQL, поэтому я надеялся, что кто-то может указать мне в правильном направлении для создания немного более сложного запроса, чем я должен был использовать в прошлом ,Выбор подмножества строк из таблицы PHP

У меня есть простая таблица MYSQL, представляющая рынок для игры, которая выглядит следующим образом: (номер для целей примеров позднее:

id seller price amount 
1 tom 330 100 
2 tom 370 500 
3 tom 400 750 
4 jerry 700 250 

в настоящее время я загрузка таблицы с помощью PHP:

Это нормально, но вместо этого я хотел бы загрузить только одну строку для каждого продавца: в частности, я хотел бы загрузить только строку с наибольшим значением «сумма» для каждого продавца. пример выше, это означает, что результат будет содержать только последние две строки i в таблице.

ответ

1

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

SELECT a.* 
FROM tableName a 
     INNER JOIN 
     (
      SELECT seller, MAX(amount) amount 
      FROM tableName 
      GROUP BY seller 
     ) b ON a.seller = b.seller AND 
       a.amount = b.amount 

или

SELECT a.* 
FROM tableName a 
WHERE a.amount = 
     (
      SELECT MAX(amount) 
      FROM tableName b 
      WHERE a.seller = b.seller 
     ) 

оба запроса будут ВЫВОД

╔════╦════════╦═══════╦════════╗ 
║ ID ║ SELLER ║ PRICE ║ AMOUNT ║ 
╠════╬════════╬═══════╬════════╣ 
║ 3 ║ tom ║ 400 ║ 750 ║ 
║ 4 ║ jerry ║ 700 ║ 250 ║ 
╚════╩════════╩═══════╩════════╝ 
+0

замечательный, спасибо! Теперь мне просто нужно разобраться, как работает это внутреннее соединение, поэтому я могу понять это в следующий раз^_ ^. – KBriggs

+0

На самом деле, следующий вопрос: если наибольшая сумма имеет повторяющиеся строки (например, если tom продает еще один лот 750), тогда запрос будет выбирать оба. Как изменить его, чтобы выбрать только один из них? Добавление LIMIT 1 во внутренний запрос не похоже на трюк. – KBriggs