GROUP BY
mapuje grupy wierszy w jeden wiersz, według odrębnej wartości w określonym kolumny, które niekoniecznie muszą znajdować się na liście wyboru.
SELECT b, c, d FROM table1 GROUP BY a;
To zapytanie jest legalnym SQL (poprawka: tylko w MySQL; w rzeczywistości nie jest to standardowy SQL i nie jest obsługiwany przez inne marki). MySQL akceptuje to i ufa, że wiesz, co robisz, wybierając b
, c
i d
w jednoznaczny sposób, ponieważ są funkcjonalnymi zależnościami a
.
Jednak Microsoft SQL Server i inne marki nie zezwalają na to zapytanie, ponieważ nie można łatwo określić zależności funkcjonalnych. edytuj: Zamiast tego standardowy SQL wymaga przestrzegania reguły pojedynczej wartości , tj. każda kolumna na liście wyboru musi być nazwana w GROUP BY
lub być argumentem funkcji set.
Natomiast DISTINCT
zawsze sprawdza wszystkie kolumny z listy wyboru i tylko te kolumny. To powszechne nieporozumienie, że DISTINCT
pozwala określić kolumny:
SELECT DISTINCT(a), b, c FROM table1;
Pomimo nawiasów tworzących DISTINCT
wyglądają jak wywołanie funkcji, tak nie jest. Jest to opcja zapytania, a odrębna wartość w dowolnym z trzech pól listy wyboru prowadzi do odrębnego wiersza w wyniku zapytania. Jedno z wyrażeń na tej liście wyboru jest otoczone nawiasami, ale nie wpłynie to na wynik.