sql >> Databasteknik >  >> RDS >> Mysql

MySql-fråga:Välj topp 3 rader från tabellen för varje kategori

LIMIT stoppar bara antalet resultat som uttalandet returnerar. Det du letar efter kallas i allmänhet analytiska/fönster-/rankningsfunktioner - som MySQL inte stöder men du kan emulera med hjälp av variabler:

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

Om du inte ändrar SELECT x.* , kommer resultatuppsättningen att inkludera rank och var_category värden - du måste ange de kolumner du verkligen vill ha om så inte är fallet.



  1. konvertera datumsträng till mysql datetime-fält

  2. Heroku PostgreSQL GROUP_BY-fel i Rails-appen

  3. Vad gör DELIMITER // i en utlösare?

  4. Hur man undviker att aktivitetsövervakning skadar din SQL-servers prestanda