Вы можете использовать предложение LIMIT
после сортировки по баллам, чтобы выбрать только 10 самых популярных фотографий, или, если вам нужно выбрать все фотографии, вы можете использовать переменную, например, следующий запрос:
SET @rank = 0;
SELECT IF((@rank := @rank + 1) <= 10, "popular", "unpopular"), p.*
FROM picture_table AS p
ORDER BY p.score DESC;
если вам нужно, чтобы лимит был динамическим, вы можете выполнить первый запрос, чтобы оценить общее количество элементов и использовать его в этом запросе, например:
SET @rank = 0;
SET @limit = 10/100; -- 10%
SELECT (@limit := ROUND(COUNT(ID) * @limit)) FROM picture_table;
SELECT IF((@rank := @rank + 1) <= @limit, "popular", "unpopular"), p.*
FROM picture_table AS p
ORDER BY p.score DESC;
Теперь с этим запросом вы можете использовать подзапрос, чтобы определить, популярна ли конкретная картинка:
SET @rank = 0;
SET @limit = 10/100;
SELECT (@limit := ROUND(COUNT(ID) * @limit)) FROM picture_table;
SELECT Q1.popularity, p.*
FROM picture_table AS p
INNER JOIN (SELECT IF((@rank := @rank + 1) <= @limit, "popular", "unpopular") AS 'popularity', p.ID
FROM picture_table AS p
ORDER BY p.score DESC) AS Q1 ON Q1.ID = p.ID
WHERE p.ID = 16;
Имейте в виду, что лучше ограничить объем данных, генерируемых подзапросом, до минимума, чтобы запрос сохранял хорошую производительность при увеличении базы данных.
Вот DB-Fiddle со всеми этими сценариями с рабочими примерами данных