我有一个具有以下结构的表:
id int
min int
max int
我想按升序排序并选择第一行的最大值和第二行的最小值。
所以我做了这个查询,在获得我需要的值之前:
select min, max
from mytable
order by min asc
limit 2;
我也尝试过这个:
select cm_max
from mytable
order by cm_min
limit 1
union
select cm_min
from mytable
order by cm_min
limit 1,1;
但是不起作用... 有什么方法可以只选择我将使用的字段吗?
最佳答案
如果您希望您的值在一行中返回,您可以这样做
SELECT MIN(CASE WHEN rnum = 1 THEN cm_max END) cm_max,
MIN(CASE WHEN rnum = 2 THEN cm_min END) cm_min
FROM
(
SELECT id, cm_min, cm_max, @n := @n + 1 rnum
FROM medidas, (SELECT @n := 0) n
ORDER BY cm_min
LIMIT 2
) q
它的作用是获取两条包含订单条件的记录,并为内部选择中的每一行分配一个行号。然后在外部选择中,我们使用 CASE
和行号来透视其值。
或
SELECT q1.cm_max, q2.cm_min
FROM
(
SELECT id, cm_min, cm_max
FROM medidas
ORDER BY cm_min
LIMIT 1
) q1 CROSS JOIN
(
SELECT id, cm_min, cm_max
FROM medidas
ORDER BY cm_min
LIMIT 1, 1
) q2
在此查询中,我们在子查询中获取两条感兴趣的记录,并使用CROSS JOIN
连接两条记录并输出所需的值。
这里是SQLFiddle 两个查询的演示
关于mysql - 如何选择不同行的两个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17711896/