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

Chování GROUP BY, když v klauzuli SELECT nejsou přítomny žádné agregační funkce

Přečtěte si dokumentaci MySQL v tomto konkrétním bodě.

Stručně řečeno, MySQL umožňuje vynechat některé sloupce ze GROUP BY pro účely výkonu, nicméně to funguje pouze pokud mají všechny vynechané sloupce stejnou hodnotu (v rámci seskupení), jinak hodnoty vrácené dotazem jsou skutečně neurčité , jak správně uhodli ostatní v tomto příspěvku. Abychom si byli jisti, že přidání klauzule ORDER BY znovu nezavede žádnou formu deterministického chování.

Ačkoli to není jádro problému, tento příklad ukazuje, že použití * namísto explicitního výčtu požadovaných sloupců je často špatný nápad.

Výňatek z dokumentace MySQL 5.0:

When using this feature, all rows in each group should have the same values
for the columns that are omitted from the GROUP BY part. The server is free
to return any value from the group, so the results are indeterminate unless
all values are the same. 


  1. Monitorování počítadel výkonu prostřednictvím PERFMON | Odstraňování problémů s výkonem serveru SQL -3

  2. uložené procedury s sqlAlchemy

  3. Chyba připraveného příkazu mysql:MySQLSyntaxErrorException

  4. Automatická oprava plánu v SQL Server