에서는 오늘날의 교훈은 당신에 대해 배우고 그룹 결과를 반환에서 쿼리를 사용하여 SQL 그룹에 의해 절입니다.
목표 오늘날의 교훈은 다음과 같다.
- 하는 방법을 배우는 그룹 결과를 사용하여 그룹에 의해
- 집계 기능을 사용한 계산을 수행
- 하는 방법을 이해하는 필터를 사용하여 그룹을 절
중요합니다! 따라 귀하의 데이터베이스에있는 예제를 수행하십시오. 아직 그렇게하지 않았다면 SQL Server 시작하기 나의 가이드에 가입하십시오., 무료 도구 및 샘플 데이터베이스를 설치하는 방법에 대한 지침을 얻습니다.
Sql GROUP BY 절
sql GROUP BY 절은 지정된 열 값에 걸쳐 행을 출력하는 데 사용됩니다. 일반적으로 값을 요약하기 위해 합계 또는 개수와 같은 집계 함수와 함께 사용됩니다. SQL 그룹에는 고유 한 필드 조합이 있습니다. 테이블의 모든 행을 반환하는 대신 값이 그룹화되면 고유 한 조합 만 반환됩니다.
WHERE 절 뒤에 GROUP BY 절이 SQL 문에 추가됩니다., 다음은 100 보다 큰 수량을 제외한 SalesOrderID 를 나열하는 예입니다.
의 몇 가지가 있는 것입니다. 먼저 요약하려는 열이 그룹 별 절에 쉼표로 구분되어 나열됩니다. 둘째,이 같은 열 목록은 select 문에 나열되어야하며 그렇지 않으면 문이 실패합니다.,
이 명령문을 실행할 때 모든 필터링 된 행이 반환되는 것은 아닙니다. SalesOrderID 의 고유 한 조합 만 결과에 포함됩니다. 이 문은
그러나 중요한 차이가 있., 고유 한정자 중지에서 출력의 독특한 조합을 행하는 반면,그룹으로 문을 계산할 수 있습니다 값을 기반으로 기본 필터링에 대한 행 각각의 고유 한 조합이다.
다시 말해서,예를 사용하여,그룹에 의해,우리가 계산할 수 있습니다 숫자 또는 OrderDetails 당기 위해 다음과 같다:
횟수는 예를 들어의 집계 기능,이들은 무엇이 진짜로 주는 그룹에 의해 문의 특별한 값입니다.
SQL 함수 집계
과 같은 일부 기능 합계,계산하는 데 사용되는 그룹의 행들은 집계 기능입니다. 대부분의 경우 이러한 함수는 GROUP BY 절을 사용하여 정의 된 값 그룹에서 작동합니다., GROUP BY 절이없는 경우 일반적으로 집계 함수가 필터링 된 모든 결과에 적용된다는 것을 알 수 있습니다.
가장 일반적인 집계 기능은 다음을 포함합니다:
AVG(expression) | 산의 평균을 표현이다. |
COUNT(expression) | count 표현식에 의해 반환 된 null 이 아닌 값의 발생. |
COUNT(*) | 는 지정된 테이블의 모든 행을 계산합니다., |
MIN(표현식) | 최소 표현식 값을 찾습니다. |
MAX(표현식) | 는 최대 표현식 값을 찾습니다. |
합계(표현식) | 표현식의 합계를 계산합니다. |
이러한 기능을 사용할 수 있습에서 자신의에 함께 그룹화 절입니다. 자체적으로,그들은 전체 테이블에서 작동합니다;그러나 GROUP BY 와 함께 사용하면 그룹화가 변경 될 때마다 계산이”재설정”됩니다., 이런 방식으로 그들은 소계 역할을합니다.
간단한 집계 기능
때 사용하여 집계할 수 있습니다 당신을 어느 계산 결과에 대한 모든 값 또는 뚜렷한 값입니다. 예를 들어,계산하는 모든 SalesOrderDetails 기록 우리가 사용할 수 있는 식
SELECT COUNT(SalesOrderID)
FROM Sales.SalesOrderDetail
이 결과의 수 121317 는 반환됩니다.
을 계산하는 고유의 주문을 만드는 내용 우리가 사용하려면 다음을 사용합니다.
SELECT COUNT(Distinct SalesOrderID)
FROM Sales.SalesOrderDetail
수 이제는 31465.,
SQL GROUP BY 및 집계 함수
집계하는 것은 개별 부분에서 전체를 만드는 것을 의미합니다. 집계 함수는 결과를 반환하기 위해 둘 이상의 행에서 작동하는 함수입니다.
AVG 및 SUM
합계 함수는 반환 된 값을 합계하고 유사한 방식으로 AVG 는 평균을 계산합니다.
OrderDetails 에서 총 주문 금액을 계산할 수 있는지 살펴 보겠습니다., 이전 수업에서 우리를 계산하는 방법을 알고 있는 총액에 대한 각각의 세부 사항:
SELECT SalesOrderID,
ProductID,
OrderQty* UnitPrice As ExtendedPrice
FROM Sales.SalesOrderDetail
이후 적용할 수 있습니다 aggregate 기능을 표현 우리가 설정할 수 있습니다 그룹에십시오를 계산하는 총당 가격 순서로
SELECT SalesOrderID, SUM(OrderQty * UnitPrice) AS TotalPriceFROM Sales.SalesOrderDetailGROUP BY SalesOrderID
우리는 심지어는 종류에 의하여 총을 주문 처음
SELECT SalesOrderID,
SUM(OrderQty * UnitPrice) AS TotalPrice
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ORDER BY TotalPrice DESC
에서 유사한 패션을 계산할 수 있습니다균기 위해 사용하는 세부 사항을 평균. 왜 당신은 아래에서 그것을 시도합니까! 당신이 붙어 얻을 경우 답을 토글.
에 대한 호기심 때문에,평균 계산 합계로 샘플의 분할에 의해 샘플의 수,다음 사용하 AVG 위에서 문이 동일:
SELECT SalesOrderID,
SUM(OrderQty * UnitPrice) / COUNT(SalesOrderID) AS AvgOrderAmount FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
우리는 많은 이 섹션입니다., 여기에 몇 가지 중요한 기억:
- aggregate 기능을 평가할 수 있습니다 같은 식 SUM(A+B)
- 해야 합 별칭을 집계 기능,그래서 열 이름을 의미가 있
- 으로 작업할 때 집계 기능과 그룹에 의해,그것은 때로는 생각하기 쉽다 세부 사항에 대해 먼저 쓰고 있는 간단한 SELECT 문을 검사하고,결과는 다음에 추가 화려 물건입니다. 나는 더 나은 쿼리를 작성하는 방법에이 커버.
SQL COUNT
COUNT 함수는 테이블이나 그룹 내에 얼마나 많은 레코드가 있는지 알아야 할 때 사용됩니다., COUNT(*)는 그룹화의 모든 레코드를 계산하는 반면 COUNT(expression)는 표현식의 결과가 null 이 아닌 모든 레코드를 계산합니다. Count 와 Distinct 를 사용하여 그룹 내의 고유 값 수를 찾을 수도 있습니다.
번호를 찾을 수 있다.의 라인을 따기 위해
SELECT SalesOrderID,
COUNT(SalesOrderDetailID)
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
의 개수를 알아내기 위해 독특한 판매 주문서 제품별
SELECT ProductID,
COUNT(DISTINCT SalesOrderID)
FROM Sales.SalesOrderDetail
GROUP BY ProductID
최소 및 최대
사용 MIN MAX 을 찾기 위해 가장 작은 가장 큰 값을,각각,테이블 내에서 또는 그룹이다.,
예를 들어,을 찾기 위해 작고 가장 큰 제품을 주문 수량에서 주문하려고
SELECT SalesOrderID,
Min(OrderQty) AS MinQuantity,
Max(OrderQty) AS MaxQuantity
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
를 찾을 수도 있습니다면 최소 또는 최대의 값을 계산이 됩니다. 여기서 우리는 우리를 찾아 최고 제품을 금액 내에서 주문한 제품:
SELECT SalesOrderID,
MAX(UnitPrice * OrderQty) as MaxAmount
FROM Sales.SalesOrderDetail GROUP BY SalesOrderID
HAVING 절
SQL 데 절을 필터링하는 데 사용되는 그룹 결과에 따르면 골재의 함수입니다. 따라서 주문 세부 라인이 두 개 이상인 모든 주문을 선택하는 등의 문제를 해결할 수 있습니다.,
는 예제에서는 다음과 같습
SELECT SalesOrderID,
COUNT(SalesOrderDetailID)
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING Count(SalesOrderDetailID) > 2
경우 우리는 발견하고 싶었 모든 주문은$1000 이상 우리를 쓰
SELECT SalesOrderID,
SUM(UnitPrice * OrderQty) AS TotalPrice
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING SUM(UnitPrice * OrderQty) > 1000
ORDER BY TotalPrice DESC
참고는 우리가 사용할 수 있는 별칭 TotalPrice 에서 주문 절하지만,다음 절은 사용하는 표현이다.
hammer home 데,나는 마지막 예를 보여주고 싶다. 여기서는 데 문이 선택 목록에없는 집계 함수를 포함하는 것을 볼 수 있습니다.,
SELECT SalesOrderID,
SUM(UnitPrice * OrderQty) AS TotalPrice
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING AVG(UnitPrice * OrderQty) > 500
ORDER BY TotalPrice DESC
위에서 쿼리를 우리가 얻고 있는 총 가격 순서를 위한 평균다.이 금액보다 큰$500.00.
마지막 문에 대한 데
비록 그들이 수행하는 유사한 기능,키가 사이에 차이는 절니다. 개별 레코드를 필터링하는 WHERE 절;반면 HAVING 절은 그룹에서 필터링됩니다.
을 유지 그것이 바로 내 머리에 제가 생각하는 WHERE 절을 작동하기 전에 모든 그룹,그리고 다음을 절 후 이상 복용하는 그룹이 형성되어 있다.,
연습
연습하는 것이 중요합니다! 샘플 데이터베이스를 사용하여 이러한 질문에 대답합니다.
- HR 은 직책 별 활성 직원 수 보고서를 원합니다. 어떤 SQL 을 사용 하시겠습니까?
- SalesOrderDetails 에서 각 제품에 대해 주문한 최소,최대 및 평균 수량을 표시합니다.
- 모든 직원의 직책을 나열하고,병가 시간의 평균 수가 마흔 이하 또는 같은 직원의 수.
- 위의#3 에서 반환 된 직책의 경우 해당 직책 답변#1 의 결과에 대해 카운트가 동일합니까?
답변은 여기!,피>
Leave a Reply