sql >> Database >  >> RDS >> Mysql

MySql-query:selecteer de bovenste 3 rijen uit de tabel voor elke categorie

LIMIT stopt alleen het aantal resultaten dat het statement retourneert. Wat u zoekt, worden over het algemeen analytische/windowing/ranking-functies genoemd - die MySQL niet ondersteunt, maar u kunt emuleren met behulp van variabelen:

SELECT x.*
  FROM (SELECT t.*,
               CASE 
                 WHEN @category != t.category THEN @rownum := 1 
                 ELSE @rownum := @rownum + 1 
               END AS rank,
               @category := t.category AS var_category
          FROM TBL_ARTIKUJT t
          JOIN (SELECT @rownum := NULL, @category := '') r
      ORDER BY t.category) x
 WHERE x.rank <= 3

Als je SELECT x.* niet verandert , de resultatenset bevat de rank en var_category waarden - u moet de kolommen specificeren die u echt wilt als dit niet het geval is.



  1. RAND() Voorbeelden in SQL Server

  2. Python - mysqlDB, sqlite resultaat als woordenboek

  3. MySQL-wildcard voor =- is er een

  4. Meerdere AND-voorwaarden MySQL