add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE t (
pkid INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
catid VARCHAR(10),
value INT
)
INSERT INTO t (catid, value) VALUES
('p01', 100),
('p01', 90),
('p01', 90),
('p01', 80),
('p01', 80),
('p01', 80),
('p01', 70),
('p01', 60),
('p01', 50),
('p01', 40),
('p02', 100)
Records: 11  Duplicates: 0  Warnings: 0
SELECT *
, ROW_NUMBER() OVER (PARTITION BY catid ORDER BY value DESC) AS "row_number"
, RANK() OVER (PARTITION BY catid ORDER BY value DESC) AS "rank"
, DENSE_RANK() OVER (PARTITION BY catid ORDER BY value DESC) AS "dense_rank"
FROM t
ORDER BY catid, value DESC, pkid
pkid catid value row_number rank dense_rank
1 p01 100 1 1 1
2 p01 90 2 2 2
3 p01 90 3 2 2
4 p01 80 4 4 3
5 p01 80 5 4 3
6 p01 80 6 4 3
7 p01 70 7 7 4
8 p01 60 8 8 5
9 p01 50 9 9 6
10 p01 40 10 10 7
11 p02 100 1 1 1
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY catid ORDER BY value DESC) AS n
FROM t
) AS x
WHERE n <= 5
pkid catid value n
1 p01 100 1
2 p01 90 2
3 p01 90 3
4 p01 80 4
5 p01 80 5
11 p02 100 1
SELECT *
FROM (
SELECT *, RANK() OVER (PARTITION BY catid ORDER BY value DESC) AS n
FROM t
) AS x
WHERE n <= 5
pkid catid value n
1 p01 100 1
2 p01 90 2
3 p01 90 2
4 p01 80 4
5 p01 80 4
6 p01 80 4
11 p02 100 1
SELECT *
FROM (
SELECT *, DENSE_RANK() OVER (PARTITION BY catid ORDER BY value DESC) AS n
FROM t
) AS x
WHERE n <= 5
pkid catid value n
1 p01 100 1
2 p01 90 2
3 p01 90 2
4 p01 80 3
5 p01 80 3
6 p01 80 3
7 p01 70 4
8 p01 60 5
11 p02 100 1