Использование LIMIT в GROUP BY для получения N результатов на динамическую группу

С помощью LIMIT в GROUP BY чтобы получить N результатов на динамическую группу

Привет всем, во-первых, я прочитал о таких вопросах, как эта проблема.
Но не получил решение. Все эти SQL предназначены для статических столбцов.
Но у меня есть динамические столбцы.

Таблица:

id  Name      Group Level
2   Jonathan  A     5
5   David     A     10
6   Alex      C     10
7   Kemal     A     71
8   John      D     21
9   Celin     F     100
12  Alexis    G     15
13  Noone     A     23

Я хочу получить первые 2 самых высоких Level из каждой группы.

Но запрос должен быть динамическим, потому что будет больше групп, где я застрял.

Решения, которые я попробовал:

  1. Выберите первые N строк из каждой группы Не давая истинного результата, он сломан.
  2. Работать только в статических столбцах.

0

Решение

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,name VARCHAR(12) NOT NULL
,group_name CHAR(1) NOT NULL
,level INT NOT NULL
);

INSERT INTO my_table VALUES
( 2,'Jonathan','A',5),
( 5,'David','A',10),
( 6,'Alex','C',10),
( 7,'Kemal','A',71),
( 8,'John','D',21),
( 9,'Celin','F',100),
(12,'Alexis','G',15),
(13,'Noone','A',23);

SELECT id
, name
, group_name
, level
FROM
( SELECT x.*
, CASE WHEN @prev = group_name THEN @i:=@i+1 ELSE @i:=1 END i
, @prev:=group_name
FROM my_table x -- technically, ordering should really happen here, in a separate subquery
, ( SELECT @prev:=null,@i:=0 ) vars
ORDER
BY group_name
, level DESC
, id
) a
WHERE i <=2;
+----+--------+------------+-------+
| id | name   | group_name | level |
+----+--------+------------+-------+
|  7 | Kemal  | A          |    71 |
| 13 | Noone  | A          |    23 |
|  6 | Alex   | C          |    10 |
|  8 | John   | D          |    21 |
|  9 | Celin  | F          |   100 |
| 12 | Alexis | G          |    15 |
+----+--------+------------+-------+
2

Другие решения

Вы также можете сделать обходной путь.

Выберите столбцы до 2 строк

ОТ СТОЛОВОГО ЗАКАЗА ПО УРОВНЮ НИЗКОЙ ГРУППЫ

С уважением,

Умар Абдулла

-1

По вопросам рекламы [email protected]