如何从mysql中的表中获取具有最小值的行

时间:2013-03-04 13:53:06

标签: mysql sql group-by

我写了一个包含几个连接的mysql查询,结果如下。

id | title | type   |    rent
------------------------------
1    abc     low         100
2    xyz     low         200
2    xyz     mid         150
2    xyz     high        300
3    mno     low         600
3    mno     mid         200

我希望小组(group bytitle拥有“最低租金”。

PLZ帮助。


我想拥有以下结果集

    id | title | type    |    rent
    ------------------------------
    1  |  abc  |   low  |     100
    ------------------------------
    2  |  xyz  |   mid  |     150
    ------------------------------
    3  |  mno  |   mid  |     200
    ------------------------------

2 个答案:

答案 0 :(得分:2)

你可以这样做:

SELECT t1.*
FROM tablename AS t1
INNER JOIN
(
   SELECT title, MIN(rent) AS minrent
   FROM tablename
   GROUP BY title 
) AS t2  ON t1.title = t2.title 
        AND t1.rent  = t2.minrent;

SQL Fiddle Demo

这会给你:

| ID | TITLE | TYPE | RENT |
----------------------------
|  1 |   abc |  low |  100 |
|  2 |   xyz |  mid |  150 |
|  3 |   mno |  mid |  200 |

这将为每个title提供最少的租金。


但是:如果您只查找具有最新rent的磁贴,那么您可以执行此操作:

SELECT t1.*
FROM tablename AS t1
ORDER BY rent  
LIMIT 1

Updated SQL Fiddle Demo

这会给你这一行:

| ID | TITLE | TYPE | RENT |
----------------------------
|  1 |   abc |  low |  100 |

请注意:如果有重复的Rent具有相同的最低租金,那么这不会给您重复。在这种情况下,请使用@user2009463建议的方式。

答案 1 :(得分:1)

select * from table_name
where rent = (select min(rent) from table_name)
group by title;