Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Group By с горен N номер от всеки вид

SELECT  mo.Letter, md.Rank
FROM    (
        SELECT  DISTINCT letter
        FROM    mytable
        ) mo
JOIN    mytable md
ON      md.Letter >= mo.Letter
        AND md.Letter <= mo.Letter
        AND Rank <=
        COALESCE
                (
                (
                SELECT  Rank
                FROM    mytable mi
                WHERE   mi.letter = mo.letter
                ORDER BY
                        Rank
                LIMIT 1, 1
                ),
                0xFFFFFFFF
                )

Трябва да имате съставен индекс на (Letter, Rank) (в този ред)

Обърнете внимание на тази конструкция:

md.Letter >= mo.Letter
AND md.Letter <= mo.Letter

вместо просто md.Letter = mo.Letter

Принуждава Range checked for each record което е по-ефективно.

Вижте тази статия в моя блог:

за повече подробности относно това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Кой е най-добрият алгоритъм за търсене за PHP и MYSQL?

  2. Ubuntu - 12.04 - MySql няма да стартира с помощта на услугата mysql start

  3. Поддръжка на подготвени изявления от страна на сървъра с PDO?

  4. INSERT INTO Table от множество таблици

  5. Как работи функцията FROM_BASE64() в MySQL