GROUP BY
съпоставя групи от редове в един ред, за отделна стойност в конкретна колони, които дори не е задължително да са в списъка за избор.
SELECT b, c, d FROM table1 GROUP BY a;
Тази заявка е законен SQL (корекция: само в MySQL; всъщност не е стандартен SQL и не се поддържа от други марки). MySQL го приема и вярва, че знаете какво правите, избирайки b
, c
и d
по недвусмислен начин, защото те са функционални зависимости на a
.
Въпреки това, Microsoft SQL Server и други марки не позволяват тази заявка, тъй като тя не може да определи лесно функционалните зависимости. редактиране: Вместо това стандартният SQL изисква от вас да следвате Правилото за една стойност , т.е. всяка колона в списъка за избор трябва или да бъде именувана в GROUP BY
клауза или в противен случай да бъде аргумент на функция за набор.
Докато DISTINCT
винаги разглежда всички колони в списъка за избор и само тези колони. Често срещано погрешно схващане е, че DISTINCT
ви позволява да посочите колоните:
SELECT DISTINCT(a), b, c FROM table1;
Въпреки скобите, които правят DISTINCT
изглежда като извикване на функция, не е така. Това е опция за заявка и отделна стойност в някое от трите полета на списъка за избор ще доведе до отделен ред в резултата от заявката. Един от изразите в този списък за избор има скоби около него, но това няма да повлияе на резултата.