从具有最大/最小值的记录中提取值

时间:2014-06-24 22:45:57

标签: mysql max greatest-n-per-group min create-table

我之前发布了一个问题并得到了一个很好的答案,但我意识到我的逻辑是错误的。给出这样一个表:

Name|ValueA|ValueB1|ValueB2
Bob |     1|    200|    205
Bob |     2|    500|    625
Bob |     7|    450|    850
Bob |     3|    644|    125
Ann |     4|    120|    120
Ann |     8|    451|    191
Ann |     9|    145|    982

我最初试图获取每个唯一名称的最大/最小值,最后是

Create TableA as (Select Name,Max(ValueA),Min(ValueA),Max(ValueB1,Max(ValueB2) Group by Name)

但这给了我(自然地)A,B1,B2中的每一个的高/低,例如

  • 鲍勃| 1 | 7 | 200 | 644 | 205 | 850

我正在寻找的是每个唯一名称中每个最低和最高A值的B1和B2值,换句话说就是上面我需要的

  • 鲍勃| 1 | 7 | 200 | 205 | 450 | 850
  • 安| 4 | 9 | 120 | 120 | 145 | 982

给出了高A值和低A值以及高和低A值记录中包含的值的B1和B2。

(这不是一个重复的问题。我的最后一个问题是,并且回答了如何将给定唯一名称的三个不同字段的高值和低值拉到新表中。事实证明这不是我需要的,尽管成功的第一个问题被回答(并标记为这样)。我需要的是给定名称的另一个字段的高值和低值的两个字段的值。如果你看问题,你会看到这是如此和解决方案事实上是不同的)

2 个答案:

答案 0 :(得分:1)

SELECT tmin.Name, tmin.ValueA, tmax.ValueA, 
    tmin.ValueB1, tmin.ValueB2, tmax.ValueB1, tmax.ValueB2
FROM (
  SELECT Name, MAX(ValueA) AS ValueAMax, MIN(ValueA) AS ValueAMin
  FROM `foo`
  GROUP BY Name
) AS t
JOIN `foo` AS tmin ON t.Name = tmin.Name AND t.ValueAMin = tmin.ValueA
JOIN `foo` AS tmax ON t.Name = tmax.Name AND t.ValueAMax = tmax.ValueA;

答案 1 :(得分:0)

以:

结束查询
group by Name