2010-02-04 11 views
20

Jestem (całkowicie) ucząc się SQL i natknąłem się na klauzulę GROUP BY.Jaki jest powód klauzuli GROUP BY bez funkcji agregacji?

GROUP BY agreguje lub grupuje zestaw wyników zgodnie z podanymi argumentami. Jeśli użyjesz tej klauzuli w zapytaniu, możesz następnie wykonać zagregowane funkcje na zestawie wyników, aby znaleźć informacje statystyczne na temat zestawu wyników, takie jak znalezienie średnich (AVG()) lub częstotliwości (COUNT()).

Moje pytanie brzmi: czy oświadczenie GROUP BY jest w jakikolwiek sposób użyteczne bez towarzyszącej funkcji agregującej?

Aktualizacja Korzystanie GROUP BY jako synonim DISTINCT jest (prawdopodobnie) to zły pomysł, bo podejrzewam, że jest wolniejszy.

Odpowiedz

13

jest instrukcją GROUP BY w jakikolwiek sposób użyteczny bez towarzyszącej funkcji agregującej?

Korzystanie DISTINCT byłoby synonimem w takiej sytuacji, ale powodem, dla którego chcesz/musisz zdefiniować GROUP BY klauzula byłoby, aby móc określić HAVING szczegóły klauzuli.

Jeśli trzeba zdefiniować HAVING klauzuli, to mieć aby zdefiniować GROUP BY - nie można zrobić to w połączeniu z DISTINCT.

+1

Twoja odpowiedź brzmi "nie", prawda? –

+0

@Niels: zależy od danych i modelu danych, ale IME nigdy nie miałem potrzeby, którą mógłbym przywołać –

6

można wykonać DISTINCT Wybierz za pomocą GROUP BY bez ZAGREGOWANYCH.

-2

Służy do czegoś więcej niż tylko agregowania funkcji.

Rozważmy na przykład następujący kod:

SELECT product_name, MAX('last_purchased') FROM products GROUP BY product_name 

ten powróci tylko 1 wynik dla danego produktu, ale z najnowszą zaktualizowaną wartość tej ewidencji.

+3

'MAX()' jest funkcją agregującą. –

+0

@am: Neils pyta o zastosowania bez funkcji Aggregate –

+0

Nie agreguje, wybiera pojedynczą wartość z listy. _Anagregat to zbiór elementów, które są zebrane razem, aby utworzyć całkowitą ilość_ – Amirshk

6

Grupa przez puszki stosowane w dwukierunkowy Majorly
1) w połączeniu z funkcji agregacji SQL
2) wyeliminować zduplikowane wiersze z wyniku ustawić

SO odpowiedzieć swoimi kłamstwami zapytania w drugiej części opisanych powyżej USE.

1

Uwaga: wszystko poniżej stosuje się tylko do MySQL

GROUP BY jest guaranteed wrócić wyniki w kolejności, DISTINCT nie jest.

GROUP BY wraz z ORDER BY NULL ma taką samą wydajność jak DISTINCT (i zaimplementowana w taki sposób).Jeśli istnieje indeks na zagregowanym polu (lub odrębnym), oba zdania używają luźnego skanowania indeksu w tym polu.

W GROUP BY można zwracać wyrażenia niezgrupowane i niezagregowane. MySQL wybierze dowolne losowe wartości z odpowiedniej grupy, aby obliczyć wyrażenie.

Za pomocą GROUP BY można pominąć wyrażenia GROUP BY z klauzuli . Z DISTINCT nie można. Każdy wiersz zwracany przez DISTINCT gwarantuje unikalność.