sql >> Databáze >  >> RDS >> Sqlserver

Klauzule SQL OVER() – kdy a proč je užitečná?

můžete použijte GROUP BY SalesOrderID . Rozdíl je v tom, že s GROUP BY můžete mít pouze agregované hodnoty pro sloupce, které nejsou zahrnuty ve GROUP BY.

Naproti tomu pomocí agregačních funkcí v okně namísto GROUP BY můžete načíst agregované i neagregované hodnoty. To znamená, že ačkoli to ve svém vzorovém dotazu neděláte, můžete načíst oba jednotlivé OrderQty hodnoty a jejich součty, počty, průměry atd. ve skupinách stejného SalesOrderID s.

Zde je praktický příklad, proč jsou okenní agregáty skvělé. Předpokládejme, že potřebujete vypočítat, jaké procento z celkového počtu je každá hodnota. Bez agregací v okně byste museli nejprve odvodit seznam agregovaných hodnot a poté jej připojit zpět k původní sadě řádků, tj. takto:

SELECT
  orig.[Partition],
  orig.Value,
  orig.Value * 100.0 / agg.TotalValue AS ValuePercent
FROM OriginalRowset orig
  INNER JOIN (
    SELECT
      [Partition],
      SUM(Value) AS TotalValue
    FROM OriginalRowset
    GROUP BY [Partition]
  ) agg ON orig.[Partition] = agg.[Partition]

Nyní se podívejte, jak můžete udělat totéž s agregací v okně:

SELECT
  [Partition],
  Value,
  Value * 100.0 / SUM(Value) OVER (PARTITION BY [Partition]) AS ValuePercent
FROM OriginalRowset orig

Mnohem jednodušší a čistší, že?



  1. Jak zobrazit chyby v sqlplus

  2. Použití funkcí password_hash a password_verify PHP 5.5

  3. Heroku psql:FATAL:zbývající připojovací sloty jsou vyhrazeny pro nereplikační připojení superuživatele

  4. Postgres Error:Více než jeden řádek vrácený poddotazem použitým jako výraz