这是我之前查询的后续问题。我希望在这种情况下发布新问题是合适的:Selecting a subset of rows from a PHP table
我有一个看起来像这样的 sql 表(例如):
id seller price amount
1 tom 350 500
2 tom 350 750
3 tom 350 750
4 tom 370 850
5 jerry 500 1000
我想为每个卖家选择一行:特别是,对于每个卖家,我想要价格最低的行,并且该价格下的金额最大。在上面的示例中,我想要第 2 行和第 5 行(或第 3 行和第 5 行,我不关心我得到第 2 行和第 3 行中的哪一个,只要我只得到其中之一即可)。
我正在使用这个:
dbquery("SELECT a.* FROM $marketdb a
INNER JOIN
(
SELECT seller, MAX(amount) amount
FROM $marketdb
WHERE price=$minprice
GROUP BY seller
) b ON a.seller = b.seller AND
a.amount = b.amount;");
但这给了我第 2、3 和 5 行,而我只想要第 2 和第 3 行之一。
我也一直怀疑这可能并不总是返回最低价格行。到目前为止,我的测试一直很困惑,因为我得到了不止一行,并且为给定的卖家输入了相同的金额。
如果有人能指出我的错误,我将不胜感激。
谢谢!
编辑:抱歉,我没有问我想问的问题。我想要从全局最低价格返回的行,每个卖家最多 1 个,而不是每个卖家的最低价格。这只是上面的第 2 行或第 3 行。对不起!
最佳答案
只需尝试按卖家添加另一个组,因为您希望卖家单行
到最终查询,如
SELECT a.* FROM $marketdb a
INNER JOIN
(
SELECT seller, MAX(amount) amount
FROM $marketdb
WHERE price=$minprice
GROUP BY seller
)
b ON a.seller = b.seller AND
a.amount = b.amount group by a.seller;
关于mysql - 使用 MySql : conditionally limiting number of entries selected 选择行的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17370205/