[SQL] 왜 우리는 GROUP BY 집계 함수에 필요합니까?
SQL왜 우리는 GROUP BY 집계 함수에 필요합니까?
나는 그들의 각각의 월급과 직원 목록 (표)가 있었다 예를 보았다. 나는 급여의 합을했고, ouptput에서 동일한 테이블을 보았다! 그 이상이었다.
여기에 수행되어야하는 것입니다 - 우리는 우리가 직원 급여로 이번 달에 지불 얼마나 많은 돈을 찾을 수 있습니다. 이를 위해, 우리는 그림과 같이 데이터베이스에 급여 금액 합계를 필요 -
SELECT EmployeeID, SUM (MonthlySalary)
FROM Employee
GROUP BY EmpID
나는 위의 코드에 의해 그룹을 사용하지 않는 경우 나 오류가 발생하는 것을 알고있다. 이것은 내가 이해하지 못하는 것입니다 -
우리는 직원 테이블에서 직원 ID를 선택합니다. SUM은 ()가 직원 테이블에서의 MonthlySalary 열을 추가해야한다는 것을 이야기하고있다. 그래서, 직접 가야하고 그룹화 한 다음를 추가하는 대신 그 숫자를 추가합니다.
직원 테이블을보고 모든 번호를 추가 - 사람이 그것을 얼마나 됐죠. 왜 그 그룹에 문제가 걸릴 한 다음을 추가?
해결법
-
==============================
1.당신이 설명을 위해 "각"로 GROUP BY 생각하는 경우가 더 쉬울 수 있습니다. 쿼리 아래 :
당신이 설명을 위해 "각"로 GROUP BY 생각하는 경우가 더 쉬울 수 있습니다. 쿼리 아래 :
SELECT empid, SUM (MonthlySalary) FROM Employee GROUP BY EmpID
말은 :
"각 EMPID 나에게 MonthlySalary의의 합을 부여"
그래서 만약 당신의 표는이처럼 보였다 :
+-----+------------+ |empid|MontlySalary| +-----+------------+ |1 |200 | +-----+------------+ |2 |300 | +-----+------------+
결과:
+-+---+ |1|200| +-+---+ |2|300| +-+---+
하나 개의 숫자의 합이 그 숫자이기 때문에 합계는 아무것도 할 나타나지 않습니다. 다른 한편으로는이처럼 보였다 경우 :
+-----+------------+ |empid|MontlySalary| +-----+------------+ |1 |200 | +-----+------------+ |1 |300 | +-----+------------+ |2 |300 | +-----+------------+
결과:
+-+---+ |1|500| +-+---+ |2|300| +-+---+
그럼 함께 합계를 두 EMPID 1 개의가 있기 때문에 것. 확실하지이 설명이 도움 여부,하지만 난이 일을 좀 더 명확하게 희망합니다.
-
==============================
2.당신이 모든 숫자를 추가하고 싶다면 당신은 GROUP BY가없는 것입니다 :
당신이 모든 숫자를 추가하고 싶다면 당신은 GROUP BY가없는 것입니다 :
SELECT SUM(MonthlySalary) AS TotalSalary FROM Employee
+-----------+ |TotalSalary| +-----------+ |777400 | +-----------+
그룹에서의 요점은 각 직원에 대해 별도의 총을 얻을 수 있다는 것입니다.
+--------+------+ |Employee|Salary| +--------+------+ |John |123400| +--------+------+ |Frank |413000| +--------+------+ |Bill |241000| +--------+------+
-
==============================
3.슬픈 것은 당신이 제안하는 구문을 지원 하나의 데이터베이스가 있다는 것입니다 :
슬픈 것은 당신이 제안하는 구문을 지원 하나의 데이터베이스가 있다는 것입니다 :
SELECT EmployeeID, SUM (MonthlySalary) FROM Employee
그러나 MySQL은 당신이 무엇을 기대하지 않습니다. 그것은 모든 사람을위한 MonthlySalary의 전체 합계, 한 임의의 직원 ID를 반환합니다. 아아.
귀하의 질문은 SQL 구문에 관한 것입니다. 대답은 그 SQL이 정의 된 방법이다, 그것은 변경하려고하지 않습니다. SELECT 절에서 집계 필드를 결정하는 것은 불합리 아니지만,이 언어가 정의되지 방법이다.
나는, 그러나 질문에 대한 약간의 동정심을 가지고 않습니다. SQL 학습 많은 사람들이 행을 정렬의 맥락에서 수행 무언가로 "그룹화"생각합니다. "출력의 상태로 정렬 미국의 도시 및 그룹을"같은 뭔가. 맞는 말이다. 그러나 "에 의해 그룹은"SQL 정말 "함께 계속"없다 "로 요약한다"를 의미한다.
-
==============================
4.당신이 GROUP BY를 지정하지 않는 경우, 집계 함수는 선택된 기록 모두에서 동작한다. 이 경우, 그것은 또한 직원 ID와 같은 특정 열을 선택하는 이해가되지 않습니다. 어느 쪽이든 당신은 당신이 직원이 직원 ID 및 그룹을 선택하는 경우 당 직원의 합계를 원하는, 또는 직원 ID와 GROUP BY 절을 떠날 수 있도록 당신은 전체 테이블에 걸쳐 총을 원한다.
당신이 GROUP BY를 지정하지 않는 경우, 집계 함수는 선택된 기록 모두에서 동작한다. 이 경우, 그것은 또한 직원 ID와 같은 특정 열을 선택하는 이해가되지 않습니다. 어느 쪽이든 당신은 당신이 직원이 직원 ID 및 그룹을 선택하는 경우 당 직원의 합계를 원하는, 또는 직원 ID와 GROUP BY 절을 떠날 수 있도록 당신은 전체 테이블에 걸쳐 총을 원한다.
쿼리에서는 GROUP BY, 그것과 같은 당신이 직원 ID를 표시하는 것을두면?
from https://stackoverflow.com/questions/13998552/why-do-we-need-group-by-with-aggregate-functions by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 PostgreSQL의 행의 최대 수에 관한 제약 조건을 작성하는? (0) | 2020.05.14 |
---|---|
[SQL] SQL을 사용하여 날짜 범위를 생성 (0) | 2020.05.14 |
[SQL] 외부 키로서 복합 키 (SQL) (0) | 2020.05.14 |
[SQL] VARBINARY에 문자 / VARCHAR에서 mysql을 변환하는 방법 (0) | 2020.05.13 |
[SQL] 확인 현재 날짜가 두 날짜 오라클 SQL 사이 인 경우 (0) | 2020.05.13 |