Mysql 获取多个最小值的SQL查询

Mysql 获取多个最小值的SQL查询,mysql,sql,Mysql,Sql,输入 +--+--+--+ |在| tn | 20| +--+--+--+ |在| ka | 18| +--+--+--+ |在| ap | 30| +--+--+--+ |美国|拉| 12| +--+--+--+ |美国约20| +--+--+--+ |美国|纽约| 5| +--+--+--+ 期望输出 +--+--+--+ |在| ka | 18| +--+--+--+ |美国|纽约| 5| +--+--+--+ 在上面的输出中,我需要每个国家及其州的最小值 选择一个国家、一个州、一个值 来

输入

+--+--+--+ |在| tn | 20| +--+--+--+ |在| ka | 18| +--+--+--+ |在| ap | 30| +--+--+--+ |美国|拉| 12| +--+--+--+ |美国约20| +--+--+--+ |美国|纽约| 5| +--+--+--+ 期望输出

+--+--+--+ |在| ka | 18| +--+--+--+ |美国|纽约| 5| +--+--+--+ 在上面的输出中,我需要每个国家及其州的最小值

选择一个国家、一个州、一个值 来自表1 a 其中a.value在表1中选择minvalue; 通过上面的查询,我将根据整个表的最小值获得输出

+--+--+--+ |美国|纽约| 5| +--+--+--+
我需要每个国家及其各自州下的最小值。

使用您的方法,您需要一个相关的子查询:

select a.country, a.state, a.value
from table1 a
where a.value in (select min(value)
                  from table1 b
                  where a.country = b.country);

有很多方法可以做到这一点,例如:

SELECT a.country,
  ( SELECT b.state
    FROM table1 b
    WHERE b.country = a.country AND b.value = MIN(a.value)) state,
  MIN(a.value)
FROM table1 a
GROUP BY a.country
你也可以试试-

SELECT b.* 
FROM mytable b 
JOIN (SELECT country,MIN(val) AS val FROM mytable GROUP BY country) AS a ON b.val=a.val AND a.country=b.country
试试下面的

您可以使用排名函数进行此查询

Select country, state, value from  
(
    Select row_number() over (order by country, value) as row_id ,
    country, state, value
)T
where row_id == 1

无需子查询或加入!这很简单:

select country,state,min(value) from table1 group by country;
输出:

+----+----+----+
| in | ka | 18 |
+----+----+----+
| us | ny | 5  |
+----+----+----+

那个么相应州的名称呢?这不是它所要求的。我需要每个国家及其各自州的最小值。
+----+----+----+
| in | ka | 18 |
+----+----+----+
| us | ny | 5  |
+----+----+----+