You can try to have a temporary table to store the top three records and display the result by joining this table.
Other than that, getting this in one request would be difficult, and there would be a huge impact on performance.
However, if you insist, you can try this
SELECT * FROM myTable WHERE mark IN (SELECT MAX(mark) FROM myTable) OR mark IN (SELECT MAX(mark) FROM myTable WHERE mark < (SELECT MAX(mark) FROM myTable)) OR mark IN (SELECT MAX(mark) FROM myTable WHERE mark < (SELECT MAX(mark) FROM myTable WHERE mark < (SELECT MAX(mark) FROM myTable)));
This will only work for top 3. If you need more, you need to increase or conditions in the where clause. But again, not bad for performance
Akhil source share