programing

여러 열에 그룹 기준 사용

muds 2023. 4. 16. 15:56
반응형

여러 열에 그룹 기준 사용

의 요점을 이해하다GROUP BY x.

하지만 어떻게?GROUP BY x, y그게 무슨 뜻이죠?

Group By XX 값이 같은 모든 것을 1개의 그룹에 넣는 것을 의미합니다.

Group By X, YX와 Y의 값이 같은 모든 것을 1개의 그룹에 넣는 것을 의미합니다.

예를 들어, 예를 들면, 대학에서 누가 어떤 과목을 수강하고 있는지에 대해, 다음의 표를 가지고 있다고 합시다.

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

왜냐하면, 2열로 그룹화하면, 「과목과 학기가 같은 모든 학생이 같은 그룹에 속하도록 그룹화한 후,그룹 마다의 모든 집계 함수(카운트, 합계, 평균 등)를 계산한다」라고 되어 있기 때문입니다.이 예에서는, 이것을 세어 보면, 1학기 ITB001을 하고 있는 사람이 3명, 2학기 ITB001을 하고 있는 사람이 2명이라는 것을 알 수 있습니다.MKB114를 하는 두 사람 모두 1학기이므로 2학기 행이 없습니다('MKB114, 2학기' 그룹에 맞는 데이터 없음).

그게 말이 됐으면 좋겠어요.

여기서는 GROUP 절의 용도뿐만 아니라 집약 함수의 용도도 설명하겠습니다.

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()는 지정된 열의 총 값 수를 반환합니다.

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

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

총 매출이 950달러 이상인 판매 주문을 찾아야 한다고 가정해 봅시다.,를 하면,HAVING과 「」GROUP BY「 」 「 」 。

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

.아이디 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」,를 하면,COUNT 및 「」의GROUP BY,ORDER BY과 '''ASC:

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

하려면 , 「10달러」를 사용합니다.AVGGROUP BY ★★★★★★★★★★★★★★★★★」HAVING§:

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)

다음은 최신 날짜 항목 "productDate"를 선택하는 방법을 보여 줍니다.MAX「 」의 「 」의 「 」

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

다음 명령문은 categoryId 열과 productId 열에 동일한 값을 가진 행을 그룹화합니다.

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

에서 간단한 영어로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|
+----------+----------------+--------+---+---+--------+---------+-------------------+-----+

나라(칼럼)_c7 토너먼트토너먼트)_c5의 값 은 다음과 같습니다.GROUP BY 디세이블화,

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개의 친선 경기가 남로디지아에서 열렸다는 것이다.

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

언급URL : https://stackoverflow.com/questions/2421388/using-group-by-on-multiple-columns

반응형