选择MySQL中第二高的值
实际上,我尝试通过此请求获取表的第二高值:选择MySQL中第二高的值,mysql,sql,select,Mysql,Sql,Select,实际上,我尝试通过此请求获取表的第二高值: SELECT MIN(`mensualite`) AS min, MAX(`mensualite`) AS max FROM `mensualites` WHERE((`financement` = "1200") AND (`mensualite` < ( SELECT MAX(`mensualite`) FROM `mensualites`))) 但不幸的是,它仍然获取最高值,而不是第二个值。你知道我的问题出在哪里吗?这里有一个替代方法
SELECT MIN(`mensualite`) AS min, MAX(`mensualite`) AS max FROM `mensualites`
WHERE((`financement` = "1200")
AND (`mensualite` < ( SELECT MAX(`mensualite`) FROM `mensualites`)))
但不幸的是,它仍然获取最高值,而不是第二个值。你知道我的问题出在哪里吗?这里有一个替代方法:
select mensualite
from (select distinct mensualite
from mensualites
WHERE `financement` = "1200"
order by mensuality desc
limit 2
) m
order by mensuality
limit 1
它选择子查询中的前两个值。然后它命令它们升序并选择最上面的一行
但是,使用“偏移”更容易做到这一点:
select distinct mensualite
from mensualites
WHERE `financement` = "1200"
order by mensuality desc
limit 1, 1
使用偏移量时,行从0开始计数,而不是从1开始计数,因此1表示第二行。这里有一种替代方法:
select mensualite
from (select distinct mensualite
from mensualites
WHERE `financement` = "1200"
order by mensuality desc
limit 2
) m
order by mensuality
limit 1
它选择子查询中的前两个值。然后它命令它们升序并选择最上面的一行
但是,使用“偏移”更容易做到这一点:
select distinct mensualite
from mensualites
WHERE `financement` = "1200"
order by mensuality desc
limit 1, 1
当使用offset时,行从0开始计数,而不是1,因此1表示第二行。将WHERE子句也添加到子查询中
SELECT MIN(`mensualite`) AS min, MAX(`mensualite`) AS max FROM `mensualites`
WHERE `financement` = "1200"
AND `mensualite` < ( SELECT MAX(`mensualite`) FROM `mensualites` WHERE `financement` = "1200")
这假设如果最大值出现两次,您希望最大值小于最大值。如果您希望在这种情况下获得最大值,则必须使用基于排序的解决方案。将WHERE子句也添加到子查询中
SELECT MIN(`mensualite`) AS min, MAX(`mensualite`) AS max FROM `mensualites`
WHERE `financement` = "1200"
AND `mensualite` < ( SELECT MAX(`mensualite`) FROM `mensualites` WHERE `financement` = "1200")
这假设如果最大值出现两次,您希望最大值小于最大值。如果您希望在这种情况下获得最大值,则必须使用基于订购的解决方案。Awesome!谢谢你的快速回答!令人惊叹的谢谢你的快速回答!我将使用ptityeti的解决方案,但感谢您的全面回答!我将使用ptityeti的解决方案,但感谢您的全面回答!