1

私は SQL を使用するのにかなり慣れていないので、過去に使用する必要があったよりも少し複雑なクエリを設定するための正しい方向に誰かが私を向けてくれることを望んでいました.

ゲームの市場を表す単純な mySql テーブルがあります。これは次のようになります: (後で例を示すための数字:

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

現在、phpを使用してこのテーブルをロードしています:

$items = dbquery("SELECT * 
                  FROM $marketdb 
                  WHERE price=$minprice 
                  ORDER BY amount;");

これは問題ありませんが、代わりに、売り手ごとに 1 つの行のみをロードすることをお勧めします。具体的には、売り手ごとに「金額」の値が最大の行のみをロードしたいと考えています。上記の例では、これは結果にテーブルの最後の 2 行のみが含まれることを意味します。

4

1 に答える 1

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 ║
╚════╩════════╩═══════╩════════╝
于 2013-06-27T01:21:35.883 に答える