sql >> Databáze >  >> RDS >> Mysql

MySql Query:Vyberte první 3 řádky z tabulky pro každou kategorii

LIMIT pouze zastaví počet výsledků, které příkaz vrátí. To, co hledáte, se obecně nazývá analytické/okenní/hodnotící funkce – které MySQL nepodporuje, ale můžete je emulovat pomocí proměnných:

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

Pokud nezměníte SELECT x.* , sada výsledků bude obsahovat rank a var_category hodnoty – pokud tomu tak není, budete muset zadat sloupce, které skutečně chcete.



  1. (poskytovatel:Named Pipes Provider, chyba:40 – Nelze otevřít připojení k serveru SQL Server)

  2. Jak získat záznamy za posledních 30 minut v MS SQL?

  3. Jak optimalizovat MySQL Boolean Full-Text Search? (Nebo čím to nahradit?) - C#

  4. Jak používat ROW_NUMBER ve sqlite