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

mysql vyberte top n max hodnot

Pro n=2 můžete

SELECT max(column1) m 
FROM table t
GROUP BY column2
UNION
SELECT max(column1) m
FROM table t
WHERE column1 NOT IN (SELECT max(column1) 
                      WHERE column2 = t.column2)

pro jakékoli n můžete použít postupy popsané zde k simulaci pořadí nad oddílem.

EDIT:Ve skutečnosti toto článek vám poskytne přesně to, co potřebujete.

V podstatě je to něco takového

SELECT t.*
FROM
   (SELECT grouper,
          (SELECT val 
           FROM table li
           WHERE li.grouper = dlo.grouper
           ORDER BY
                 li.grouper, li.val DESC
           LIMIT 2,1) AS mid
   FROM 
      (
      SELECT DISTINCT grouper
      FROM table
      ) dlo 
   ) lo, table t
WHERE t.grouper = lo.grouper
      AND t.val > lo.mid

Nahraďte grouper s názvem sloupce, podle kterého chcete seskupit, a val s názvem sloupce, který obsahuje hodnoty.

Chcete-li zjistit, jak přesně to funguje, postupujte krok za krokem od nejvnitřnějšího dotazu a spusťte je.

Také je zde mírné zjednodušení – poddotaz, který najde mid může vrátit NULL, pokud určitá kategorie nemá dostatek hodnot, takže by to mělo být KOALESCE s nějakou konstantou, která by dávala smysl při porovnání (ve vašem případě by to bylo MIN domény hodnoty, v článku je to MAX).

EDIT2: Zapomněl jsem zmínit, že je to LIMIT 2,1, který určuje n (LIMIT n,1).



  1. Oracle 10g - optimalizujte WHERE IS NOT NULL

  2. Sloučení datových souborů se Statistica, část 1

  3. Knihovně místností pro Android se nepodařilo zkopírovat databázi z podkladu

  4. Jak zajistit, aby rozšíření nebylo přemístitelné?