Сначала вы можете LIMIT только для песен.
Затем для этой первой песни, LIMIT для главного пользователя.
SELECT usermost.UID, song.SName
FROM
(
SELECT songmost.SID, rec.UID
FROM
(
SELECT SID
FROM record
WHERE YEAR(`Date`) = 2018
GROUP BY SID
ORDER BY COUNT(*) DESC, COUNT(DISTINCT UID) DESC
LIMIT 1
) songmost
JOIN record rec
ON rec.SID = songmost.SID AND YEAR(rec.`Date`) = 2018
GROUP BY rec.SID, rec.UID
ORDER BY COUNT(*) DESC
LIMIT 1
) usermost
LEFT JOIN song ON song.SID = usermost.SID
Пример:
CREATE TABLE user (
UID int primary key not null auto_increment,
UName varchar(30) not null,
State int not null default 0
);
CREATE TABLE artist (
AID int primary key not null auto_increment,
AName varchar(30) not null,
Description varchar(300)
);
create table song (
SID int primary key not null auto_increment,
AID int not null,
SName varchar(30) not null,
ReleaseDate date not null,
constraint fk_song_aid foreign key (AID) references artist(AID)
);
create table record (
SID int not null,
UID int not null,
`Date` date not null,
constraint fk_record_sid foreign key (SID) references song(SID)
);
insert into user (UName, State) values
('John Doe', 0),
('Jane Sheppard', 1);
insert into artist (AName, Description) values
('Imagine Dragons', 'American pop rock band'),
('Yuki Kajiura', 'Japanese musician, composer and record producer');
insert into song (AID, SName, ReleaseDate) values
(1, 'Whatever it takes', '2017-10-06'),
(2, 'I talk to the rain', '2005-07-05');
insert into record (SID, UID, `Date`) values
(1,1,'2018-01-01'),(1,1,'2018-02-01'),(1,2,'2018-03-01'),
(2,1,'2018-04-01'),(2,2,'2018-01-01');
select rec.SID, song.SName, user.UName, artist.AName, COUNT(*) As Total
from record rec
left join song on song.SID = rec.SID
left join user on user.UID = rec.UID
left join artist on artist.AID = song.AID
group by rec.SID, rec.UID
SID | SName | UName | AName | Total
--: | :----------------- | :------------ | :-------------- | ----:
1 | Whatever it takes | John Doe | Imagine Dragons | 2
1 | Whatever it takes | Jane Sheppard | Imagine Dragons | 1
2 | I talk to the rain | John Doe | Yuki Kajiura | 1
2 | I talk to the rain | Jane Sheppard | Yuki Kajiura | 1
SELECT usermost.UID, song.SName
FROM
(
SELECT songmost.SID, rec.UID
FROM
(
SELECT SID
FROM record
WHERE YEAR(`Date`) = 2018
GROUP BY SID
ORDER BY COUNT(*) DESC, COUNT(DISTINCT UID) DESC
LIMIT 1
) songmost
JOIN record rec
ON rec.SID = songmost.SID AND YEAR(rec.`Date`) = 2018
GROUP BY rec.SID, rec.UID
ORDER BY COUNT(*) DESC
LIMIT 1
) usermost
LEFT JOIN song ON song.SID = usermost.SID
UID | SName
--: | :----------------
1 | Whatever it takes
db <> скрипка здесь