[英]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.