Używanie group by na wielu kolumnach

Rozumiem sens GROUP BY x.

Ale jak działa GROUP BY x, y i co to oznacza?

Author: janw, 2010-03-10

4 answers

Group By X oznacza Umieść wszystkie te o tej samej wartości dla X w jednej grupie .

Group By X, Y oznacza umieścić wszystkie te z tymi samymi wartościami dla obu X i Y w jednej grupie .

Aby zilustrować na przykładzie, załóżmy, że mamy następującą tabelę, aby zrobić z tym, kto uczęszcza na jaki 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 group by tylko w kolumnie temat; powiedz:

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

Dostaniesz coś w stylu:

+---------+-------+
| Subject | Count |
+---------+-------+
| ITB001  |     5 |
| MKB114  |     2 |
+---------+-------+

...bo jest 5 wpisów dla ITB001 i 2 dla MKB114

Gdybyśmy mieli group by dwie kolumny:

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

Dostalibyśmy to:

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

Dzieje się tak dlatego, że gdy grupujemy dwie kolumny, mówi się " Grupuj je tak, aby wszystkie osoby z tym samym przedmiotem i semestrem znalazły się w tej samej grupie, a następnie obliczamy wszystkie zagregowane funkcje (liczenie, suma, średnia itp.) dla każdej z tych grup". W tym przykładzie świadczy o tym fakt, że gdy je policzymy, są trzy osoby robiące to w pierwszym semestrze, i dwie osoby robiące to w drugim semestrze. W 2011 roku, w ramach programu MKB114, w ramach programu MKB114, w ramach programu MKB114, w ramach programu MKB114, w ramach programu MKB114, w ramach programu MKB114, w ramach programu MKB114, w ramach programu MKB114, w ramach programu MKB114.]} Mam nadzieję, że to ma sens.

 2234
Author: Smashery,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-02 00:49:59

Tutaj wyjaśnię nie tylko użycie klauzuli grupowej, ale także użycie funkcji zbiorczych.

Klauzula GROUP BY jest używana w połączeniu z funkcjami agregującymi do grupowania wyników-ustawionych przez jedną lub więcej kolumn. np.:

-- GROUP BY with one parameter:
SELECT column_name, AGGREGATE_FUNCTION(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

-- GROUP BY with two parameters:
SELECT
    column_name1,
    column_name2,
    AGGREGATE_FUNCTION(column_name3)
FROM
    table_name
GROUP BY
    column_name1,
    column_name2;

Zapamiętaj ten rozkaz:

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

  2. FROM (klauzula jest używana do wyświetlania tabel)

  3. WHERE (klauzula służy do filtrowania records)

  4. GROUP BY (klauzula może być używana w instrukcji SELECT do zbierania danych w wielu rekordach i pogrupować wyniki według jednej lub więcej kolumn)

  5. HAVING (klauzula jest używana w połączeniu z klauzulą GROUP BY do ogranicz grupy zwracanych wierszy tylko do tych, których warunek jest prawdą)

  6. Uporządkuj według (do sortowania wyników służy słowo kluczowe)

Możesz użyć wszystkich z nich, jeśli używasz agregować funkcje, i to jest kolejność, że muszą być ustawione, w przeciwnym razie można uzyskać błąd.

Funkcje zbiorcze to:

MIN () Zwraca najmniejszą wartość w danej kolumnie

MAX () Zwraca maksymalną wartość w danej kolumnie.

Sum () Zwraca sumę wartości liczbowych w danej kolumnie

AVG () Zwraca średnią wartość danej kolumny

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

COUNT ( * ) Zwraca liczbę wierszy w tabeli

Przykłady skryptów SQL na temat korzystania z funkcji zbiorczych:

Powiedzmy, że musimy znaleźć zlecenia sprzedaży, których całkowita sprzedaż jest większa niż $950. Aby to osiągnąć, łączymy klauzulę HAVING i klauzulę GROUP BY:

SELECT 
    orderId, SUM(unitPrice * qty) Total
FROM
    OrderDetails
GROUP BY orderId
HAVING Total > 950;

Zliczanie wszystkich rozkazów i grupowanie ich customerID oraz sortowanie wyniku Ascendent. Łączymy funkcję COUNT i GROUP BY, ORDER BY klauzule i ASC:

SELECT 
    customerId, COUNT(*)
FROM
    Orders
GROUP BY customerId
ORDER BY COUNT(*) ASC;

Pobierz kategorię, która ma średnią cenę jednostkową większą niż $10, używając funkcji AVG połącz z GROUP BY i HAVING klauzulami:

SELECT 
    categoryName, AVG(unitPrice)
FROM
    Products p
INNER JOIN
    Categories c ON c.categoryId = p.categoryId
GROUP BY categoryName
HAVING AVG(unitPrice) > 10;

Uzyskanie tańszego produktu z każdej kategorii, za pomocą funkcji MIN w zapytaniu podrzędnym:

SELECT categoryId,
       productId,
       productName,
       unitPrice
FROM Products p1
WHERE unitPrice = (
                SELECT MIN(unitPrice)
                FROM Products p2
                WHERE p2.categoryId = p1.categoryId)

Poniższe polecenie grupuje wiersze o tych samych wartościach w obu categoryId oraz productId kolumny:

SELECT 
    categoryId, categoryName, productId, SUM(unitPrice)
FROM
    Products p
INNER JOIN
    Categories c ON c.categoryId = p.categoryId
GROUP BY categoryId, productId
 44
Author: S. Mayol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-08 15:29:43

Jak rozumiesz punkt grupy przez x. tutaj x to nazwa kolumny tabeli. Jest to wywołanie GROUP By Table Single Column_Name. W GROUP By x, y. oznacza to, że Tabela GROUP By Two Column_Names x and y. jest to tzw. "wiele grupujących kolumn". Mogę to wyjaśnić bardziej szczegółowo poniżej.

W SQL Instrukcja GROUP BY służy do porządkowania identycznych danych w grupy za pomocą niektórych funkcji. Przykład: - Jeśli a dana kolumna ma te same wartości w różnych wierszach, a następnie ułoży te wiersze w grupie. Ta klauzula GROUP BY jest następująca po klauzuli Gdzie w instrukcji SELECT i poprzedza ORDER BY klauzula. Są to ważne punkty: -

  1. Klauzula GROUP BY jest używana z instrukcją SELECT .
  2. w zapytaniu klauzula GROUP BY jest umieszczona po klauzuli Gdzie .
  3. w zapytaniu grupa Klauzula BY jest umieszczana przed ORDER BY klauzula jeśli jest używana.

Podstawowa składnia klauzuli GROUP BY jest pokazana w poniższym bloku kodu. Klauzula GROUP BY musi spełniać warunki w klauzuli Gdzie I musi poprzedzać klauzulę ORDER BY jeśli jest używana.

SELECT column1, column2
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2
ORDER BY column1, column2
  1. nazwa_funkcji: - Nazwa użytej funkcji na przykład MIN (), MAX (), SUM (), AVG (), COUNT ().
  2. table_name:- Name of stół.
  3. condition:- Condition used.

Klauzula GROUP BY może zawierać dwie lub więcej kolumn-innymi słowy, grupa może składać się z dwóch lub więcej kolumn. Zilustrujemy to dwoma przykładami.

W pierwszy przykład grupujemy pojedynczą kolumnę, aby umieścić wszystkie wiersze o tej samej wartości tylko tej konkretnej kolumny w jednej grupie. To jest Szczegóły tabeli pracowników: -

Tutaj wpisz opis obrazka

Potraktuj zapytanie jako pokazano poniżej dla grupy według pojedynczej kolumny w tabeli pracowników:-

SELECT NAME, SUM(SALARY) 
FROM Employee 
GROUP BY NAME;

Wyjście grupy przez pojedynczą kolumnę to:-

Tutaj wpisz opis obrazka

Jak widać na powyższym wyjściu, wiersze o zduplikowanych nazwach są pogrupowane pod tą samą nazwą, a ich odpowiadająca pensja jest sumą wynagrodzenia zduplikowanych wierszy. Funkcja SUM() SQL jest tutaj używana do obliczania sumy.

W drugim przykładzie grupujemy według wielu kolumn. Oznacza to umieszczenie wszystkich wiersze o tych samych wartościach obu kolumn column1 i column2 w jednej grupie. Zobacz tabelę uczniów poniżej: -

Tutaj wpisz opis obrazka

Rozważmy poniższe zapytanie dla grupy według wielu kolumn w tabeli uczniów:-

SELECT SUBJECT, YEAR, Count(*)
FROM Student
GROUP BY SUBJECT, YEAR;

Wyjście grupy przez wiele kolumn to:-

Tutaj wpisz opis obrazka

Jak widać na powyższym wykładzie uczniowie z tego samego przedmiotu I roku są umieszczani w tej samej grupie. I tych, których jedyny przedmiot jest taki sam, ale nie Rok należy do różnych grup. Więc tutaj pogrupowaliśmy tabelę według dwóch kolumn lub więcej niż jednej kolumny.

Podobnie jak w przypadku Uporządkuj według, możemy zastąpić liczby nazw kolumn w grupie klauzulą. Generalnie zaleca się to robić tylko wtedy, gdy grupujesz wiele kolumn lub gdy coś innego powoduje, że tekst w klauzuli GROUP BY jest zbyt długi. Są to niektóre podstawowe regiony do użycia GROUP BY w SQL.

  1. The GROUP BY Klauzula SQL służy do grupowania wierszy o tych samych wartościach.
  2. Klauzula GROUP BY jest używana razem z instrukcją SQL SELECT .
  3. Instrukcja SELECT użyta w klauzuli GROUP BY może być używana tylko w nazwach kolumn, funkcji agregujących, stałych i wyrażeń.
  4. SQLHaving Clause jest używany do ograniczenia wyników zwracanych przez grupę przez klauzulę.
  5. GRUPA MYSQL Klauzula by jest używana do zbierania danych z wielu rekordów i zwracanego rekordu ustawionego przez jedną lub więcej kolumn.

To jest GROUP BY oficjalny dokument SQL, aby lepiej zrozumieć grupę BY.

 1
Author: Raksha Saini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-21 05:37:29

W prostym języku angielskim z GROUP BY z dwoma parametrami to co robimy to szukamy podobnych par wartości i otrzymujemy liczbę do trzeciej kolumny.

Spójrz na poniższy przykład w celach informacyjnych. Tutaj używam Międzynarodowe wyniki piłkarskie od 1872 do 2020

+----------+----------------+--------+---+---+--------+---------+-------------------+-----+
|       _c0|             _c1|     _c2|_c3|_c4|     _c5|      _c6|                _c7|  _c8|
+----------+----------------+--------+---+---+--------+---------+-------------------+-----+
|1872-11-30|        Scotland| England|  0|  0|Friendly|  Glasgow|           Scotland|FALSE|
|1873-03-08|         England|Scotland|  4|  2|Friendly|   London|            England|FALSE|
|1874-03-07|        Scotland| England|  2|  1|Friendly|  Glasgow|           Scotland|FALSE|
|1875-03-06|         England|Scotland|  2|  2|Friendly|   London|            England|FALSE|
|1876-03-04|        Scotland| England|  3|  0|Friendly|  Glasgow|           Scotland|FALSE|
|1876-03-25|        Scotland|   Wales|  4|  0|Friendly|  Glasgow|           Scotland|FALSE|
|1877-03-03|         England|Scotland|  1|  3|Friendly|   London|            England|FALSE|
|1877-03-05|           Wales|Scotland|  0|  2|Friendly|  Wrexham|              Wales|FALSE|
|1878-03-02|        Scotland| England|  7|  2|Friendly|  Glasgow|           Scotland|FALSE|
|1878-03-23|        Scotland|   Wales|  9|  0|Friendly|  Glasgow|           Scotland|FALSE|
|1879-01-18|         England|   Wales|  2|  1|Friendly|   London|            England|FALSE|
|1879-04-05|         England|Scotland|  5|  4|Friendly|   London|            England|FALSE|
|1879-04-07|           Wales|Scotland|  0|  3|Friendly|  Wrexham|              Wales|FALSE|
|1880-03-13|        Scotland| England|  5|  4|Friendly|  Glasgow|           Scotland|FALSE|
|1880-03-15|           Wales| England|  2|  3|Friendly|  Wrexham|              Wales|FALSE|
|1880-03-27|        Scotland|   Wales|  5|  1|Friendly|  Glasgow|           Scotland|FALSE|
|1881-02-26|         England|   Wales|  0|  1|Friendly|Blackburn|            England|FALSE|
|1881-03-12|         England|Scotland|  1|  6|Friendly|   London|            England|FALSE|
|1881-03-14|           Wales|Scotland|  1|  5|Friendly|  Wrexham|              Wales|FALSE|
|1882-02-18|Northern Ireland| England|  0| 13|Friendly|  Belfast|Republic of Ireland|FALSE|
+----------+----------------+--------+---+---+--------+---------+-------------------+-----+

A teraz idę do grupy według podobnego kraju (kolumna _c7) i turnieju(_c5) wartości pary GROUP BY operacji,

SELECT `_c5`,`_c7`,count(*)  FROM res GROUP BY `_c5`,`_c7`

+--------------------+-------------------+--------+
|                 _c5|                _c7|count(1)|
+--------------------+-------------------+--------+
|            Friendly|  Southern Rhodesia|      11|
|            Friendly|            Ecuador|      68|
|African Cup of Na...|           Ethiopia|      41|
|Gold Cup qualific...|Trinidad and Tobago|       9|
|AFC Asian Cup qua...|             Bhutan|       7|
|African Nations C...|              Gabon|       2|
|            Friendly|           China PR|     170|
|FIFA World Cup qu...|             Israel|      59|
|FIFA World Cup qu...|              Japan|      61|
|UEFA Euro qualifi...|            Romania|      62|
|AFC Asian Cup qua...|              Macau|       9|
|            Friendly|        South Sudan|       1|
|CONCACAF Nations ...|           Suriname|       3|
|         Copa Newton|          Argentina|      12|
|            Friendly|        Philippines|      38|
|FIFA World Cup qu...|              Chile|      68|
|African Cup of Na...|         Madagascar|      29|
|FIFA World Cup qu...|       Burkina Faso|      30|
| UEFA Nations League|            Denmark|       4|
|        Atlantic Cup|           Paraguay|       2|
+--------------------+-------------------+--------+

Explanation: znaczenie pierwszego wiersza polega na tym, że były Łącznie na terenie Rodezji Południowej odbyło się 11 towarzyskich turniejów.

Uwaga: tutaj obowiązkowe jest użycie kolumny licznika w tym przypadku.

 0
Author: Indrajith Ekanayake,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-26 14:33:58