Eine etwas Abfrage aus diesem Artikel in meinem Blog geändert:
SELECT l.*
FROM (
SELECT category,
COALESCE(
(
SELECT count
FROM mytable li
WHERE li.category = dlo.category
ORDER BY
li.category DESC, li.count DESC, li.id DESC
LIMIT 9, 1
), CAST(-1 AS DECIMAL)) AS mcount
COALESCE(
(
SELECT id
FROM mytable li
WHERE li.category = dlo.category
ORDER BY
li.category DESC, li.count DESC, li.id DESC
LIMIT 9, 1
), CAST(-1 AS DECIMAL)) AS mid
FROM (
SELECT DISTINCT category
FROM mytable dl
) dlo
) lo, mytable l
WHERE l.category >= lo.category
AND l.category <= lo.category
AND (l.count, l.id) >= (lo.mcout, lo.id)
Sie benötigen einen zusammengesetzten Index für (category, count, id)
schaffen für diese effizient zu arbeiten .
Beachten Sie die Verwendung von l.category >= lo.category AND l.category <= lo.category
statt bloßer: l.category = lo.category
Dies ist ein Hack MySQL
Verwendung effizienter Range check for each record