2012-07-09 32 views
0

獲得最大值和最小值我有兩個表:從田地

First: 
id | title 
1 | aaa 
2 | bbb 
3 | ccc 

Second: 
id | first_id | one | two | three | four 
1 | 1  | 3 | 1 | 4  | 6 
2 | 2  | 4 | 4 | 1  | 2 
3 | 3  | 1 | 2 | 3  | 4 

,我想顯示:

id | title | min | max 
1 | aaa | 1 | 6 
2 | bbb | 1 | 4 
3 | ccc | 1 | 4 

這可能與SQL?怎麼樣? :)

+0

我想獲得所有四肢領域(一,二,三,四),並獲得該值 - 最小和最大價值 – 2012-07-09 09:25:25

+0

是,這很清楚..現在..你可以做一個領域嗎? – 2012-07-09 09:27:01

回答

1

讀湯姆的答案,這將是最好的事情。

反正和恥辱對我道:

SELECT f.id, f.title 
MIN(LEAST(s.one, s.two, s.three, s.four)) as min, 
MAX(GREATEST(s.one, s.two, s.three, s.four)) as max 
FROM First f 
INNER JOIN Second s on f.id = s.first_id 
GROUP BY f.id, f.title 

你可以(通過與集團)刪除MIN和MAX如果二不能有相同的first_id多行。

+0

爲什麼這麼複雜? – 2012-07-09 09:28:44

+0

@TomvanderWoerdt有什麼複雜的?我們不知道第二個是否可以有多個相同的ID – 2012-07-09 09:28:58

+0

MIN和MAX,JOIN和GROUP的用法都在一個查詢中。似乎沒有必要 – 2012-07-09 09:29:45

2

規範化您的數據庫。用你目前的設置不是不可能的,但絕對不推薦。

CNC中
如果你一定要,你可以使用LEAST()GREATEST()

-edit2-

SELECT 
    a.id, 
    a.title, 
    LEAST(b.one,b.two,b.three,b.four) min, 
    GREATEST(b.one,b.two,b.three,b.four) max 
FROM first a 
INNER JOIN second b ON a.id=b.first_id 
1

你可以使用UNION來做到這一點。試試這個:

SELECT a.id, a.title, MIN(b.c) `Min`, MAX(b.c) `Max` 
FROM First a INNER JOIN 
(
    SELECT first_id, `one` c FROM `Second` 
     UNION 
    SELECT first_id, `two` c FROM `Second` 
     UNION 
    SELECT first_id, `three` c FROM `Second` 
     UNION 
    SELECT first_id, `four` c FROM `Second` 
) b on a.id = b.First_ID 
GROUP BY a.id 

SEE DEMO HERE

+0

爲什麼downvoted?我已經演示瞭解決這個問題的另一種方式,而不使用「最少」和「最好」。 – 2012-07-09 09:38:15

1
select first_id,F.title ,MIN(num) [min],MAX(num) [max] from (
select first_id,[one] [num]from [Second] union all 
select first_id,[two] [num]from [Second] union all 
select first_id,[three] [num]from [Second] union all 
select first_id,[four] [num] from [Second])[Second] 
join [First] F 
on Id=first_id 
group by first_id,F.title 
+0

@johntotetwoo:對不起更新的查詢 – 2012-07-09 09:39:07