Mysql 获取多个最小值的SQL查询
输入 +--+--+--+ |在| tn | 20| +--+--+--+ |在| ka | 18| +--+--+--+ |在| ap | 30| +--+--+--+ |美国|拉| 12| +--+--+--+ |美国约20| +--+--+--+ |美国|纽约| 5| +--+--+--+ 期望输出 +--+--+--+ |在| ka | 18| +--+--+--+ |美国|纽约| 5| +--+--+--+ 在上面的输出中,我需要每个国家及其州的最小值 选择一个国家、一个州、一个值 来自表1 a 其中a.value在表1中选择minvalue; 通过上面的查询,我将根据整个表的最小值获得输出 +--+--+--+ |美国|纽约| 5| +--+--+--+Mysql 获取多个最小值的SQL查询,mysql,sql,Mysql,Sql,输入 +--+--+--+ |在| tn | 20| +--+--+--+ |在| ka | 18| +--+--+--+ |在| ap | 30| +--+--+--+ |美国|拉| 12| +--+--+--+ |美国约20| +--+--+--+ |美国|纽约| 5| +--+--+--+ 期望输出 +--+--+--+ |在| ka | 18| +--+--+--+ |美国|纽约| 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 |
+----+----+----+