MySQL按列分组,并仅获得具有第三列最大值的行

时间:2020-04-16 21:18:55

标签: mysql sql amazon-web-services amazon-redshift

我已经根据自己的数据成功构建了如下表格:

如何获得每个光束编号的第三列B的最大值?我想摆脱其他行。任何帮助表示赞赏。

My Table

3 个答案:

答案 0 :(得分:2)

使用窗口功能:

select t.*
from (select t.*,
             row_number() over (partition by beam_num order by b desc) as seqnum
      from t
     ) t
where seqnum = 1;

答案 1 :(得分:1)

您不应该发布图片文字就可以了 在mysql 5.x中,没有窗口函数。

您必须检查的A,B,C D的聚集函数,如果B大于或等于2,则需要此值。

SELECT 
    t1.`Beam_Num`, MAX(`A`), MAX(`B`), MAX(`C`), MAX(`D`)
FROM
    table1 t1
        INNER JOIN
    (SELECT 
        MAX(B) maxb, Beam_Num
    FROM
        table1
    GROUP BY Beam_Num) t2 ON t1.Beam_Num = t2.Beam_Num
        AND t1.B = t2.maxb
GROUP BY t1.Beam_Num;

模式(MySQL v5.7)

CREATE TABLE table1
    (`Beam_Num` int, `A` NUMERIC, `B` NUMERIC, `C` NUMERIC, `D` numeric)
;

INSERT INTO table1
    (`Beam_Num`, `A`, `B`, `C`, `D`)
VALUES
    (10, 4760.0, 491190.0, 223.0, 0.482),
    (10, 4760.0, 528769.0, 205.0, 0.444),
    (1000, 1941.0, 143560.0, -56.0, 0.2),
    (1000, 1941.0, 113815.0, -19.0, 0.15),
    (1001, 2695.0, 115663.0, 95.0, 0.56),
    (1003, 2250.0, 473762.0, 96.0, 0.555),
    (1003, 2250.0, 474130.0, 185.0, 0.555),
    (1005, 11861.0, 457673.0, -1056.0, 0.333),
    (1008, 948.0, 20471.0, 77.0, 0.5),
    (1008, 948.0, 102978.0, 92.0, 0.375),
    (1009, 3308.0, 250528.0, 261.0, 0.715)
;

查询#1

SELECT
t1.`Beam_Num`, MAX(`A`), MAX(`B`), MAX(`C`), MAX(`D`)
FROm 
    table1 t1
    INNER JOIN
    (SELECT MAX(B) maxb,Beam_Num FROM table1 GROUP BY Beam_Num) t2
    ON t1.Beam_Num =
 t2.Beam_Num AND t1.B = t2.maxb
 GROUP BY t1.Beam_Num;

| Beam_Num | MAX(`A`) | MAX(`B`) | MAX(`C`) | MAX(`D`) |
| -------- | -------- | -------- | -------- | -------- |
| 10       | 4760     | 528769   | 205      | 0        |
| 1000     | 1941     | 143560   | -56      | 0        |
| 1001     | 2695     | 115663   | 95       | 1        |
| 1003     | 2250     | 474130   | 185      | 1        |
| 1005     | 11861    | 457673   | -1056    | 0        |
| 1008     | 948      | 102978   | 92       | 0        |
| 1009     | 3308     | 250528   | 261      | 1        |

View on DB Fiddle

答案 2 :(得分:0)

只需使用MAX聚合函数和GROUP BY子句运行查询,如下所示:

SELECT Beam_Num, A, MAX(B), C, D
FROM table_name
GROUP BY Beam_Num;

用要在其上运行查询的表的名称替换table_name