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

sql skupina podle versus odlišné

GROUP BY mapuje skupiny řádků na jeden řádek pro každou odlišnou hodnotu v specifické sloupce, které ani nemusí být nutně ve výběrovém seznamu.

SELECT b, c, d FROM table1 GROUP BY a;

Tento dotaz je legální SQL (oprava: pouze v MySQL; ve skutečnosti to není standardní SQL a není podporováno jinými značkami). MySQL to akceptuje a důvěřuje, že víte, co děláte, výběrem b , c a d jednoznačným způsobem, protože jde o funkční závislosti a .

Microsoft SQL Server a další značky však tento dotaz nepovolují, protože nedokáže snadno určit funkční závislosti. upravit: Místo toho standardní SQL vyžaduje, abyste se řídili pravidlem jedné hodnoty , tj. každý sloupec ve výběrovém seznamu musí být buď pojmenován v GROUP BY klauzule nebo může být argumentem množinové funkce.

Zatímco DISTINCT vždy prohlíží všechny sloupce ve výběrovém seznamu a pouze tyto sloupce. Je běžnou mylnou představou, že DISTINCT umožňuje zadat sloupce:

SELECT DISTINCT(a), b, c FROM table1;

Přes závorky tvořící DISTINCT vypadat jako volání funkce, není. Je to možnost dotazu a odlišná hodnota v kterémkoli ze tří polí výběrového seznamu povede k odlišnému řádku ve výsledku dotazu. Jeden z výrazů v tomto výběrovém seznamu má kolem sebe závorky, ale to neovlivní výsledek.



  1. Důležitost výběru správné velikosti virtuálního počítače Azure

  2. Generovat data mezi časovými obdobími

  3. Oracle 12cR2 nyní v beta verzi

  4. Povolení TLS v R12.1