mysql - 使用 MySql : conditionally limiting number of entries selected 选择行的子集

标签 mysql sql

这是我之前查询的后续问题。我希望在这种情况下发布新问题是合适的: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/

相关文章:

MySql GROUP BY 和 ORDER BY 重复数据删除

mysql - 获取特定范围内的平均值

mysql - 如何在准备语句插入操作期间插入自动增量字段的下一个值?

SQL Server 在 SQL 函数中执行 (sp_executesql ) 命令

c# - 如何使用 Entity Framework 在现有的 SQL Server 数据库中创建一个表?

sql - TSQL - 替换或删除两个不同字符串之间的字符串,多次在整个列的字段中

mysql - 这个 phpbb 查询可以优化吗?

mysql - 通过变量和声明变量时的错误设置结果限制

php - session ID 刷新后 Codeigniter 用户数据丢失 [CodeIgniter 3.0]

mysql SELECT * FROM 表 WHERE 列+空格+列 LIKE '%query%'