By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
create table song (
song_id int primary key auto_increment,
name varchar(30),
liked int
);
insert into song (name, liked) values
('song1',1),
('song2',9),
('song3',2),
('song4',8),
('song5',10),
('song6',20),
('song7',0),
('song8',15),
('song9',5),
('song10',7);
WITH TOP3SONGS AS
(
SELECT *
FROM song
ORDER BY liked DESC
LIMIT 3
),
RANDOM3SONGS AS
(
SELECT *
FROM song
WHERE song_id NOT IN (select song_id from TOP3SONGS)
ORDER BY rand()
LIMIT 3
)
SELECT *
FROM TOP3SONGS
UNION ALL
SELECT *
FROM RANDOM3SONGS;
song_id | name | liked |
---|---|---|
6 | song6 | 20 |
8 | song8 | 15 |
5 | song5 | 10 |
9 | song9 | 5 |
10 | song10 | 7 |
7 | song7 | 0 |
SELECT song.*
FROM song
LEFT JOIN
( SELECT song_id, liked
FROM song
ORDER BY liked DESC
LIMIT 3
) top3songs ON top3songs.song_id = song.song_id
ORDER BY top3songs.liked DESC, RAND()
LIMIT 6;
song_id | name | liked |
---|---|---|
6 | song6 | 20 |
8 | song8 | 15 |
5 | song5 | 10 |
4 | song4 | 8 |
3 | song3 | 2 |
1 | song1 | 1 |