具有最小值的MYSQL分组依据返回错误的行[重复]

g6baxovj  于 2023-02-11  发布在  Mysql
关注(0)|答案(1)|浏览(122)
    • 此问题在此处已有答案**:

MySQL - Fetching lowest value(7个答案)
昨天关门了。
我有一个名为market_listing的表,其中包含以下列:
| 身份证|内标识ID|价格|资源组ID|
| - ------|- ------|- ------|- ------|
我试图获得每个resourceGroupId的最低价格,并在同一个查询中查找与该最低价格匹配的tokenId。
例如
| 身份证|内标识ID|价格|资源组ID|
| - ------|- ------|- ------|- ------|
| 1个|二十七|五百|1个|
| 第二章|二十五|1个|1个|
| 三个|三个|三百|第二章|
| 八个|五个|二百|第二章|
| 九|八个|一百|三个|
| 四个|十三|一百五十|三个|
| 五个|十五|七百五十|四个|
| 六个|二十七|九百|四个|
如果我使用:SELECT resourceGroupId, MIN(price) as min_price, tokenId FROM market_listing GROUP BY resourceGroupId
发生的情况是,一方面我确实获得了特定resourceGroupId的最低价格,但关联的tokenId是错误的,我将得到如下结果
| 内标识ID|价格|资源组ID|
| - ------|- ------|- ------|
| 二十七|1个|1个|
如何解决此问题?例如,在查找最低价格时,同时获取同一行的值?本例的预期结果为:
| 内标识ID|价格|资源组ID|
| - ------|- ------|- ------|
| 二十五|1个|1个|
| 五个|二百|第二章|
| 八个|一百|三个|
| 十五|七百五十|四个|
谢谢大家!

nfeuvbwi

nfeuvbwi1#

您可以尝试以下查询

SELECT resourceGroupId, MIN(tokenId) AS tokenId, MIN(price) AS min_price 
FROM market_listing m1
WHERE NOT EXISTS 
     (SELECT 1 
      FROM market_listing m2 
      WHERE m2.resourceGroupId = m1.resourceGroupId 
            AND m2.tokenId <> m1.tokenId
            AND m2.price < m1.price)
GROUP BY resourceGroupId

参见here演示

相关问题