从PHP表中选择行的子集

时间:2013-06-27 01:19:26

标签: php mysql sql

我是使用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 个答案:

答案 0 :(得分: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 ║
╚════╩════════╩═══════╩════════╝