etc./StackOverFlow

여러 열에서 그룹화 사용

청렴결백한 만능 재주꾼 2023. 4. 26. 12:46
반응형

질문자 :Alex Gordon


GROUP BY x 의 요점을 이해합니다.

GROUP BY x, y 는 어떻게 작동하며 무엇을 의미합니까?



Group By X 는 X 값이 같은 모든 것을 하나의 그룹에 넣는 것을 의미합니다.

Group By X, Y 는 X와 Y 모두에 대해 동일한 값을 가진 모든 것을 하나의 그룹에 넣는 것을 의미합니다.

예를 사용하여 설명하기 위해 대학에서 누가 어떤 과목에 참석하는지와 관련하여 다음 표가 있다고 가정해 보겠습니다.

 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 | +---------+----------+----------+

주제 열에만 group by 를 사용하는 경우 말하다:

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

다음과 같은 결과를 얻을 수 있습니다.

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

...ITB001에는 5개의 항목이 있고 MKB114에는 2개의 항목이 있기 때문에

두 개의 열로 group by 하면:

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

우리는 이것을 얻을 것입니다:

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

두 개의 열로 그룹화 할 때 "같은 주제와 학기를 가진 모든 사람들이 같은 그룹에 있도록 그룹화 한 다음 모든 집계 함수 (개수, 합계, 평균 등)를 계산하기 때문입니다. ) 해당 그룹 각각에 대해" . 이 예에서 세어보면 1학기에 ITB001을 하는 사람 이 3 명, 2 학기에 2명이 하고 있다는 사실로 증명됩니다. MKB114를 하는 사람은 모두 1학기에 있으므로 2학기 행("MKB114, 2학기" 그룹에 맞는 데이터 없음)

그것이 의미가 있기를 바랍니다.


Smashery

여기서는 GROUP 절 사용뿐만 아니라 Aggregate 함수 사용에 대해서도 설명하겠습니다.

GROUP BY 절은 집계 함수와 함께 사용하여 결과 집합을 하나 이상의 열로 그룹화합니다. 예:

 -- 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;

다음 순서를 기억하십시오.

  1. SELECT(데이터베이스에서 데이터를 선택하는 데 사용)

  2. FROM(절은 테이블을 나열하는 데 사용됨)

  3. WHERE(절은 레코드를 필터링하는 데 사용됨)

  4. GROUP BY(절을 SELECT 문에서 사용하여 여러 레코드에 걸쳐 데이터를 수집하고 결과를 하나 이상의 열로 그룹화할 수 있음)

  5. HAVING(절은 조건이 TRUE인 행만 반환되는 행 그룹으로 제한하기 위해 GROUP BY 절과 함께 사용됨)

  6. ORDER BY(키워드는 결과 집합을 정렬하는 데 사용됨)

집계 함수를 사용하는 경우 이 모든 것을 사용할 수 있으며 이것이 설정해야 하는 순서입니다. 그렇지 않으면 오류가 발생할 수 있습니다.

집계 기능은 다음과 같습니다.

MIN()은 주어진 열에서 가장 작은 값을 반환합니다.

MAX()는 주어진 열의 최대값을 반환합니다.

SUM()은 주어진 열에 있는 숫자 값의 합계를 반환합니다.

AVG()는 주어진 열의 평균 값을 반환합니다.

COUNT()는 주어진 열의 총 값 수를 반환합니다.

COUNT(*)는 테이블의 행 수를 반환합니다.

집계 함수 사용에 대한 SQL 스크립트 예:

총 판매액이 $950보다 큰 판매 주문을 찾아야 한다고 가정해 보겠습니다. 이를 달성하기 위해 HAVING 절과 GROUP BY 절을 결합합니다.

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

모든 주문을 계산하고 이를 customerID로 그룹화하고 결과를 오름차순으로 정렬합니다. COUNT 함수와 GROUP BY , ORDER BY 절 및 ASC .

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

AVG 함수를 GROUP BYHAVING 절과 결합하여 평균 단가가 $10보다 큰 범주를 검색합니다.

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

하위 쿼리에서 MIN 함수를 사용하여 각 범주별로 저렴한 제품 가져오기:

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

다음 문은 categoryIdproductId 열 모두에서 동일한 값을 가진 행을 그룹화합니다.

 SELECT categoryId, categoryName, productId, SUM(unitPrice) FROM Products p INNER JOIN Categories c ON c.categoryId = p.categoryId GROUP BY categoryId, productId

S. Mayol

두 개의 매개변수가 있는 GROUP BY 간단한 영어에서 우리가 하고 있는 일은 유사한 값 쌍을 찾고 세 번째 열에 대한 카운트를 가져오는 것입니다.

참고로 다음 예를 보십시오. 여기 에서는 1872년부터 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| +----------+----------------+--------+---+---+--------+---------+-------------------+-----+

GROUP BY 연산으로 유사한 국가(컬럼 _c7 ) 및 토너먼트( _c5) 값 쌍으로 _c5

 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| +--------------------+-------------------+--------+

설명: 첫 번째 줄의 의미는 남로디지아에서 총 11번의 친선 토너먼트가 열렸다는 뜻입니다.

참고: 이 경우 카운터 열을 사용해야 합니다.


INDRAJITH

출처 : http:www.stackoverflow.com/questions/2421388/using-group-by-on-multiple-columns

반응형