繁体   English   中英

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

[英]Extract Values from records with max/min values

我早些时候发布了一个问题,得到了一个很好的答案,但是意识到我以错误的方式讨论了我的逻辑。 给定这样一个表:

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值记录中包含的值的B1和B2。

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

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;

用以下命令结束查询:

group by Name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM