여러 열에 그룹 기준 사용
의 요점을 이해하다GROUP BY x
.
하지만 어떻게?GROUP BY x, y
그게 무슨 뜻이죠?
Group By X
X 값이 같은 모든 것을 1개의 그룹에 넣는 것을 의미합니다.
Group By X, Y
X와 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;
다음 순서에 주의해 주세요.
SELECT(데이터베이스에서 데이터를 선택하기 위해 사용됨)
FROM(테이블을 나열하기 위해 절약을 사용합니다)
WHERE(일시 중지는 레코드를 필터링하기 위해 사용됩니다.
GROUP BY(절제를 SELECT 문에서 사용하여 여러 레코드에 걸쳐 데이터를 수집하고 결과를 하나 이상의 열로 그룹화할 수 있습니다.)
HAVING (반환되는 행의 그룹을 조건이 TRUE인 행으로만 제한하기 위해 GROUP BY 절과 조합하여 사용합니다.)
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달러」를 사용합니다.AVG
을 GROUP 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
'programing' 카테고리의 다른 글
목표 C의 상수 (0) | 2023.04.16 |
---|---|
파이프와 함께 "tee"를 사용하는 동안 파일에 표준 오류를 쓰는 방법은 무엇입니까? (0) | 2023.04.16 |
로그아웃 후 다시 로그인하지 않고 .bashrc 설정을 새로고침하려면 어떻게 해야 합니까? (0) | 2023.04.16 |
NSURLC Connection을 사용하여 신뢰할 수 없는 증명서를 SSL로 접속하려면 어떻게 해야 합니까? (0) | 2023.04.16 |
2개의 리스트에 걸쳐 반복하여 각 리스트에서1개의 요소를 얻는 더 좋은 방법이 있을까요? (0) | 2023.04.16 |