簡體   English   中英

如何選擇不同行的兩個字段?

[英]How to select two fields of different rows?

我有一個具有這種結構的表:

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演示

將您的限制更改為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是否會抱怨字段名稱不匹配,因此可能需要別名,也可能不需要別名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM