选择分组列的最低值

时间:2017-06-23 18:01:26

标签: mysql sql

A         B        C
+--------+-------+----+
|    310 | 09001 | 18 |
|  80614 | 09001 | 18 |
| 169009 | 09001 | 19 |
| 201695 | 09001 | 19 |
| 282089 | 09001 | 19 |
| 320438 | 09001 | 19 |
| 131733 | 09001 | 19 |
| 387427 | 09001 | 19 |
| 404201 | 09001 | 19 |
| 525449 | 09001 | 19 |
| 605542 | 09001 | 19 |
| 710740 | 09001 | 18 |
| 746380 | 09001 | 19 |
| 867492 | 09001 | 19 |
| 864637 | 09005 | 18 |
| 710741 | 09005 | 17 |
| 746375 | 09005 | 18 |
| 556470 | 09005 | 18 |
| 604258 | 09005 | 18 |
| 401597 | 09005 | 18 |
| 141331 | 09005 | 18 |
| 336054 | 09005 | 18 |
| 387423 | 09005 | 18 |
| 203706 | 09005 | 18 |
| 278651 | 09005 | 18 |
| 126352 | 09005 | 18 |
|    312 | 09005 | 17 |
|  74627 | 09005 | 17 |
+--------+-------+----+

不确定如何标题,但这是场景。我希望在B列中为每个不同的值显示1行,这是C列中的最高值,而A列中的最低值。

例如,09001就是这样 169009 09001 19,对于09005,它将显示126352 09005 18

因此,基本上C列的最大值按列B分组,而这些行的列A中的最低值。

提前致谢

SELECT MIN(A)AS MaxA,B,MAX(C)AS MinC 从表 GROUP BY B

给出

310 09001   19
312 09005   18

不是

131733 09001 19
141331 09005 18

这就是我需要的

select min(A), B, C from my_table where ( C) in ( select max(C) from my_table where B in (09001,09005) group by B) and B in (09001,09005) group by B, C

结果

310 09001 18

126352 09005 18

131733 09001 19

但09001应该只有一个结果

Select min A,B from my_table where C in (select max(c) from my table where A in (09001, 09005)group by A) and fips in (09001, 09005) group by A

最终工作,虽然它只显示A和B,但我需要的只是A这个例子。我确定还有其他方法可以让C显示出来。

感谢帮助人员

2 个答案:

答案 0 :(得分:1)

我认为你已经解决了自己的问题。

SELECT MIN(A) AS MaxA, B, MAX(C) AS MinC
FROM Table
GROUP BY B

除非我在那里犯了某种愚蠢的错误。

编辑:我现在更了解这些要求。试一试。

WITH T1 AS (
SELECT B, MAX(C) AS MaxC
FROM Table
GROUP BY B
), T2 AS (
SELECT MIN(A) AS MinA, MaxC
FROM T1
GROUP BY MaxC)

SELECT T2.MinA AS A, T1.B, T1.MaxC AS C
FROM T1
INNER JOIN T2
ON T1.MaxC = T2.MaxC

答案 1 :(得分:0)

你可能需要最小值超过B

  select  min(A), B, C
  from my_table 
  where ( B, C ) in (
    select B, max(C)
    from my_table 
    group by B
  )
 group by B,C