Mysql группировать по столбцу и получать строки только с максимальным значением третьего столбца - PullRequest
0 голосов
/ 17 апреля 2020

Мне удалось построить таблицу, такую ​​как ниже, из моих данных:

Как я могу получить максимум третьего столбца B для каждого номера луча? Я хочу избавиться от других рядов. Любая помощь приветствуется.

Мой стол

Ответы [ 3 ]

2 голосов
/ 17 апреля 2020

Использовать оконные функции:

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 голос
/ 17 апреля 2020

Вы не должны были размещать текст изображения просто отлично. В mysql 5.x нет оконных функций.

Функция агрегации для 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        |

Показать на БД Fiddle

0 голосов
/ 22 апреля 2020

Просто запустите запрос, используя агрегатную функцию MAX и предложение GROUP BY следующим образом:

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

Замените table_name именем таблицы, для которой вы хотите выполнить запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...