簡體   English   中英

Mysql 按列分組,只取第三列最大值的行

[英]Mysql group by a column and get the rows only with the maximum value of the third column

我設法從我的數據中構建了一個如下表:

如何獲得每個梁號的第三列 B 的最大值? 我想擺脫其他行。 任何幫助表示贊賞。

我的桌子

使用 window 函數:

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

您不應該發布圖像文本就好了在 mysql 5.x 中沒有 window 功能。

A, B,,C D 的聚合函數你必須檢查,如果 2 或更多 B 有最大值則需要。

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        |

在 DB Fiddle 上查看

只需使用MAX聚合 function 和GROUP BY子句運行查詢,如下所示:

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

table_name替換為要在其上運行查詢的表的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM