Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL Group By z najwyższym numerem N każdego rodzaju

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
                )

Musisz mieć złożony indeks na (Letter, Rank) (w tej kolejności)

Zwróć uwagę na tę konstrukcję:

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

zamiast zwykłego md.Letter = mo.Letter

Wymusza Range checked for each record co jest bardziej wydajne.

Zobacz ten artykuł na moim blogu:

aby uzyskać więcej informacji na ten temat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL SELECT n rekordów na podstawie GROUP BY

  2. mysql pokazuje dostępne przedziały czasowe i przedziały czasowe zajęte z tabeli

  3. Jak pozyskiwać nowych użytkowników dziennie w MySQL?

  4. Uaktualnij MySQL do MariaDB 10 (Część 1 – Zainstaluj MariaDB 5.5)

  5. Data i godzina w skrypcie PHP