mysql - 如何在MySQL中获取具有最小值的行对应的id?

标签 mysql

我有两个名为 dealsmp_details 的表。 deal_idmp_details_id 列是两个主键。两个表之间存在关系,使用 deal_mp_id 列作为外键。我想通过 mp_details_id 获取列名 deal_selling_price 的所有最小记录。以下是表格:

交易

╔═════════╦════════════╦════════════════════╗
║ deal_id ║ deal_mp_id ║ deal_selling_price ║
╠═════════╬════════════╬════════════════════╣
║    3    ║     1      ║        425         ║
║    4    ║     1      ║        540         ║  
║    5    ║     2      ║        340         ║
║    6    ║     2      ║        315         ║
║    7    ║     3      ║        425         ║
║    8    ║     3      ║        720         ║
║    9    ║     4      ║        382.5       ║
║   10    ║     4      ║        495         ║
║   11    ║     5      ║        595         ║
║   12    ║     5      ║        720         ║
╚═════════╩════════════╩════════════════════╝

mp_details

╔═══════════════╦═════════════════════╗
║ mp_details_id ║   mp_details_name   ║
╠═══════════════╬═════════════════════╣
║       1       ║ Olive Bar & Kitchen ║
║       2       ║ Thai High           ║
║       3       ║ Tonino              ║
║       4       ║ Impromptu           ║
║       5       ║ Zerruco             ║
╚═══════════════╩═════════════════════╝

我想要这样的结果:

╔═════════╦════════════╦════════════════════╗
║ deal_id ║ deal_mp_id ║ deal_selling_price ║
╠═════════╬════════════╬════════════════════╣
║    3    ║     1      ║        425         ║
║    6    ║     2      ║        315         ║
║    7    ║     3      ║        425         ║
║    9    ║     4      ║        382.5       ║
║   11    ║     5      ║        595         ║
╚═════════╩════════════╩════════════════════╝

最佳答案

以下查询将为您提供上述屏幕截图的结果集:

SELECT d1.deal_id, d1.deal_mp_id, d2.minPrice
FROM deals d1
INNER JOIN
(
    SELECT deal_mp_id, MIN(deal_selling_price) AS minPrice
    FROM deals
    GROUP BY deal_mp_id
) d2
    ON d1.deal_mp_id = d2.deal_mp_id AND d1.deal_selling_price = d2.minPrice

如果您想要包含来自 mp_details 表的信息,您可以像这样进行额外的连接:

SELECT d1.deal_id, d1.deal_mp_id, d2.minPrice, mp.mp_details_name
FROM deals d1
INNER JOIN
(
    SELECT deal_mp_id, MIN(deal_selling_price) AS minPrice
    FROM deals
    GROUP BY deal_mp_id
) d2
    ON d1.deal_mp_id = d2.deal_mp_id AND d1.deal_selling_price = d2.minPrice
INNER JOIN mp_details mp
    ON d1.deal_mp_id = mp.mp_details_id

点击下面的链接获取正在运行的演示:

SQLFiddle

关于mysql - 如何在MySQL中获取具有最小值的行对应的id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35449386/

相关文章:

mysql - SQL语句中字符串的正则表达式

sql - 在 MySQL 中存储和查询 xml 数据

php - 使用用户输入连接 2 个表

MySQL 选择列值的最大计数

mysql - "mysqli_insert_id"的问题

mysql - 选择所有 30 天前的记录

mysql - SQL 使用一个条目输出两行

mysql - 使用 SELECT LEFT JOIN 插入

MySQL:SELECT DISTINCT 多列,第一个结果在某些列上

mysql - Neo4j 中的索引,文本或整数