我是使用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;");
这很好,但我想要做的只是每个卖家只加载一行:特别是,我想只加载每个卖家的“金额”最大值的行。在上面的示例中,这意味着结果将只包含表中的最后两行。
答案 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 ║
╚════╩════════╩═══════╩════════╝