如何选择不同行的两个字段?

时间:2013-07-17 23:16:21

标签: mysql sql database select

我有一个具有这种结构的表:

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;

但是不起作用...... 有没有办法只选择我将使用的字段?

2 个答案:

答案 0 :(得分: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 演示

答案 1 :(得分:0)

将您的限制更改为1,1以仅从该集合中选择第二条记录:

select cm_max as 'value'
from medidas
order by cm_min
limit 1
union
select cm_min as 'value'
from medidas
order by cm_min
limit 1,1;

不确定MySQL是否会抱怨字段名称不匹配,因此可能需要也可能不需要别名。