2012-07-09 31 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