sql >> Database >  >> RDS >> Mysql

MySQL Group By met het hoogste N-nummer van elke soort

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
                )

U moet een samengestelde index hebben op (Letter, Rank) (in deze volgorde)

Let op deze constructie:

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

in plaats van slechts md.Letter = mo.Letter

Het dwingt Range checked for each record wat efficiënter is.

Zie dit artikel in mijn blog:

voor meer informatie hierover.



  1. verschil tussen NLS_NCHAR_CHARACTERSET en NLS_CHARACTERSET voor Oracle

  2. Hoe afbeelding (bolb-type) in jsp-pagina van mySql DB in Struts 2 met Hibernate weer te geven

  3. Hoe overervingsmodellering toepassen in relationele databases?

  4. Wat betekent pooling=false in een MySQL-verbindingsreeks?