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

Získejte prvních n záznamů pro každou skupinu seskupených výsledků

Zde je jeden způsob, jak toho dosáhnout, pomocí UNION ALL (Viz SQL Fiddle s ukázkou ). Funguje to se dvěma skupinami, pokud máte více než dvě skupiny, budete muset zadat group číslo a přidejte dotazy pro každou group :

(
  select *
  from mytable 
  where `group` = 1
  order by age desc
  LIMIT 2
)
UNION ALL
(
  select *
  from mytable 
  where `group` = 2
  order by age desc
  LIMIT 2
)

Existuje celá řada způsobů, jak toho dosáhnout, v tomto článku najdete nejlepší trasu pro vaši situaci:

http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

Upravit:

To by mohlo fungovat i pro vás, vygeneruje to číslo řádku pro každý záznam. Použití příkladu z výše uvedeného odkazu vrátí pouze záznamy s číslem řádku menším nebo rovným 2:

select person, `group`, age
from 
(
   select person, `group`, age,
      (@num:=if(@group = `group`, @num +1, if(@group := `group`, 1, 1))) row_number 
  from test t
  CROSS JOIN (select @num:=0, @group:=null) c
  order by `Group`, Age desc, person
) as x 
where x.row_number <= 2;

Viz Ukázka



  1. Jak přidat uživatelskou skupinu Active Directory jako přihlášení na SQL Server

  2. Budoucnost Postgres-XL

  3. Jak vytvořit databázové tabulky pomocí SQL

  4. Top 5 funkcí, které musí vaše platforma pro sledování výkonu databáze SQL Server poskytovat