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

标签 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;

但是不起作用... 有什么方法可以只选择我将使用的字段吗?

最佳答案

如果您希望您的值在一行中返回,您可以这样做

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/

相关文章:

php - 无法插入指向数据库的链接

php - mysqli 到 PDO 翻译

sql - TeraData SQL中 "TOP"和 "SAMPLE"之间的区别

mysql - Node.js 在本地存储远程数据库(同步)

mysql - 电影关系数据库设计

mysql - 使用UPDATE函数批量更新记录

c# - MySql.Data错误: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use

php - Wordpress 2nd laugauge 不工作

sql - 如何使用我在 select 子句中创建的列?

sql - SQL Server 2008中的计数(不同的([值))OVER(分区依据)