Używanie grupowania według wielu kolumn

1035

Rozumiem sens GROUP BY x

Ale jak GROUP BY x, ydziała i co to znaczy?

l - '' '' ---------- '' '' '' '
źródło
2
Nie znajdziesz go opisanego, ponieważ stawia to pytanie. Klauzula GROUP BY może przyjmować jedno lub więcej pól. GRUPUJ WEDŁUG klienta; GROUP BY nazwisko, imię; Zgrupuj według roku, sklepu, SKU itp.
Bill

Odpowiedzi:

2025

Group By Xoznacza umieszczenie wszystkich z tą samą wartością X w jednej grupie .

Group By X, Yoznacza umieszczenie wszystkich tych samych wartości dla X i Y w jednej grupie .

Aby zilustrować to na przykładzie, załóżmy, że mamy następującą tabelę dotyczącą tego, kto studiuje dany przedmiot na uniwersytecie:

Table: Subject_Selection

Subject   Semester   Attendee
---------------------------------
ITB001    1          John
ITB001    1          Bob
ITB001    1          Mickey
ITB001    2          Jenny
ITB001    2          James
MKB114    1          John
MKB114    1          Erica

Gdy używasz tylko group byw kolumnie tematu; mówić:

select Subject, Count(*)
from Subject_Selection
group by Subject

Otrzymasz coś takiego:

Subject    Count
------------------------------
ITB001     5
MKB114     2

... ponieważ jest 5 pozycji dla ITB001 i 2 dla MKB114

Gdybyśmy byli w group bydwóch kolumnach:

select Subject, Semester, Count(*)
from Subject_Selection
group by Subject, Semester

otrzymalibyśmy to:

Subject    Semester   Count
------------------------------
ITB001     1          3
ITB001     2          2
MKB114     1          2

Wynika to z tego, że kiedy grupujemy według dwóch kolumn, mówi się: „Grupuj je, aby wszystkie osoby z tym samym przedmiotem i semestrem znajdowały się w tej samej grupie, a następnie oblicz wszystkie funkcje agregujące (liczba, suma, średnia itp.). ) dla każdej z tych grup ” . W tym przykładzie pokazuje to fakt, że kiedy je policzymy, trzy osoby wykonują ITB001 w semestrze 1, a dwie robią to w semestrze 2. Obie osoby wykonujące MKB114 są w semestrze 1, więc nie ma wiersz dla semestru 2 (brak danych pasuje do grupy „MKB114, semestr 2”)

Mam nadzieję, że to ma sens.

Smashery
źródło
11
@Smashery: Czy to znaczy, że GROUP BY A,Bto samo co GROUP BY B,A?
tumchaaditya
23
Tak. Nie mogę powiedzieć na pewno, czy są tak samo wydajni jak siebie nawzajem, ale dadzą taki sam rezultat, tak.
Smashery
2
Należy tutaj dodać, że istnieje różnica między, GROUP BY a, ba GROUP BY a AND bponieważ druga zawiera tylko zgrupowane elementy o dokładnie takiej samej treści i bez „podgrup”. W takim przypadku wynik będzie taki sam jak pierwszy.
Dwza
5
Chciałbym dodać, że kolejność grupowania według kolumn nie ma znaczenia. W powyższej przykładowej grupie według semestru Temat dałby ten sam wynik
2441441
2
cóż, grupuj według a, b i grupuj według b, a NIE zwracają tego samego wyniku - wiersze są wyświetlane w innej kolejności
fanny
33

GROUP BYKlauzula jest stosowana w połączeniu z funkcjami kruszywa do grupy wynikiem skonfigurowany przez jedną lub więcej kolumn. na przykład:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

Zapamiętaj to zamówienie:

1) WYBIERZ (służy do wybierania danych z bazy danych)

2) OD (klauzula służy do wyświetlania tabel)

3) GDZIE (klauzula służy do filtrowania rekordów)

4) GROUP BY (klauzula może być używana w instrukcji SELECT do gromadzenia danych w wielu rekordach i grupowania wyników według jednej lub więcej kolumn)

5) HAVING (klauzula jest używana w połączeniu z klauzulą ​​GROUP BY, aby ograniczyć grupy zwracanych wierszy tylko do tych, których warunek jest PRAWDA)

6) ORDER BY (słowo kluczowe służy do sortowania zestawu wyników)

Możesz użyć ich wszystkich, jeśli używasz funkcji agregujących, i to jest kolejność, w jakiej muszą być ustawione, w przeciwnym razie możesz otrzymać błąd.

Funkcje agregujące to:

MIN zwraca najmniejszą wartość w danej kolumnie

SUMA zwraca sumę wartości liczbowych w danej kolumnie

AVG zwraca średnią wartość z danej kolumny

COUNT zwraca całkowitą liczbę wartości w danej kolumnie

COUNT (*) zwraca liczbę wierszy w tabeli

S. Mayol
źródło
1
ale gdzie umieszczamy 2 kolumny, pytanie o sposób agregacji w oparciu o 2 / więcej kolumn
Chaitanya Bapat
Cześć Chaitanya, nie wiem, czy o to pytasz, ale dam ci tylko kilka przykładów. Jeśli masz tabelę produktów, w ten sposób używasz funkcji agregujących, poniżej znajdują się dwa scenariusze: WYBIERZ AVG (instock) Z produktów; To obliczy średnie jednostki w magazynie tabeli produktów. Teraz chcesz obliczyć jednostki w magazynie według kategorii produktu, musisz użyć funkcji AVG z klauzulą ​​GROUP BY w następujący sposób: SELECT categoryId, AVG (instock) Z produktów GROUP BY categoryId;
S. Mayol,
To nawet nie zdalnie odpowiada na pytanie ... Pytanie polega na tym, jak uzyskać jednocześnie „łańcuchowe grupowanie” „przedmiotu” i „semestru”, jak wyjaśniono w podanym przykładzie ...
MahNas92