请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

mysql 分组带出主键

请教老师一个问题。A(主键) B(分组依据列) C(值列)三列 表ABC
select max© from abc group by b。

尝试过selelct a.* from abc a join (select b,max© mc from abc group by b) a1 on a.b=a1.b and a.c=a1.mc。但是因为分组后MAX©可能几个都是,导致结果不是预期。想问下老师有什么办法。非常感谢。

正在回答

2回答

没有看明白,你最终想要的结果是什么?如果按B列分组那么每一个不同的B值都会有一个max值这是正常的。

0 回复 有任何疑惑可以回复我~
  • 提问者 荔枝仔 #1
    最终想要的结果是按照 B列分组,每组最大值C 所在行的主键
    回复 有任何疑惑可以回复我~ 2019-12-04 16:34:32
  • sqlercn 回复 提问者 荔枝仔 #2
    mysql> select * from t1;
    +---+------+------+
    | a | b    | c    |
    +---+------+------+
    | 1 | a    |   10 |
    | 2 | a    |   20 |
    | 3 | a    |   15 |
    | 4 | b    |   30 |
    | 5 | b    |   25 |
    | 6 | c    |   50 |
    | 7 | c    |   60 |
    | 8 | d    |   30 |
    +---+------+------+
    8 rows in set (0.00 sec)
    
    mysql> select a.* from t1 a join (select b,max(c) as mc from t1 group by b) b on a.b=b.b and a.c=b.mc;
    +---+------+------+
    | a | b    | c    |
    +---+------+------+
    | 2 | a    |   20 |
    | 4 | b    |   30 |
    | 7 | c    |   60 |
    | 8 | d    |   30 |
    +---+------+------+
    4 rows in set (0.00 sec)
    回复 有任何疑惑可以回复我~ 2019-12-04 17:30:17
  • 提问者 荔枝仔 回复 sqlercn #3
    好的老师,已经解决了。情况是比如
    | 1 | a    |   10 |
    | 2 | a    |   20 |
    | 3 | a    |   20 |这样A组里面有2个最大值。我进行了2次分组。
    回复 有任何疑惑可以回复我~ 2019-12-05 13:37:52
提问者 荔枝仔 2019-12-04 16:44:30

A    B    C    

1    a    10    

2    a    20    

3    a    15    

4    b    30    

5    b    25    

6    c    50    

7    c    60    

8    d    30    

假如原数据这样,想要按照B列分组,得到MAX(C)所在行的A值。

上面数据想要的结果是

A    B    C    

2    a    20    

4    b    30    

7    c    60    

8    d    30    


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信