[SQL] 이 집계 함수 나 GROUP BY 절 중 하나에 포함되지 않기 때문에 열 이유는 선택 목록에서 유효하지 않습니다 [중복]
SQL이 집계 함수 나 GROUP BY 절 중 하나에 포함되지 않기 때문에 열 이유는 선택 목록에서 유효하지 않습니다 [중복]
나는 오류가 발생했습니다 -
select loc.LocationID, emp.EmpID
from Employee as emp full join Location as loc
on emp.LocationID = loc.LocationID
group by loc.LocationID
이 상황은 빌 Karwin에 의해 주어진 대답에 맞는.
위의 대한 보정, ExactaBox 의해 답변에 적합 -
select loc.LocationID, count(emp.EmpID) -- not count(*), don't want to count nulls
from Employee as emp full join Location as loc
on emp.LocationID = loc.LocationID
group by loc.LocationID
원래의 질문 -
SQL 쿼리 용 -
select *
from Employee as emp full join Location as loc
on emp.LocationID = loc.LocationID
group by (loc.LocationID)
나는이 오류가 왜 이해가 안 돼요. 내가 할 일은 원하는 것은 함께 특정 위치에 테이블과 다음 그룹의 모든 직원을 가입 할 수 있습니다.
나는 내 자신의 질문에 대한 부분 설명을 가지고 생각합니다. 그 확인하면 말해 -
같은 위치에서 일을 우리가 먼저 LocationID를 언급해야 해당 그룹에 모든 직원.
그런 다음, 우리는 / 옆에 각 직원의 ID를 언급하지 않을 수 없습니다. 오히려, 우리는 그 위치에 직원의 총 수를 언급 SUM () 우리가해야 그 위치에서 일하는 직원 즉. 우리는 그것을 후자의 방법을합니까 왜, 나는 확실하지 않다. 그래서, 이것은 오류의 일부 "가 집계 함수 중 하나에 포함되지 않은"설명합니다.
오류의 GROUP BY 절 부분에 대한 설명은 무엇입니까?
해결법
-
==============================
1.나는 다음과 같은 테이블 T 있다고 가정 해 봅시다 :
나는 다음과 같은 테이블 T 있다고 가정 해 봅시다 :
a b -------- 1 abc 1 def 1 ghi 2 jkl 2 mno 2 pqr
그리고 난 다음 쿼리를 수행합니다
SELECT a, b FROM T GROUP BY a
출력은 두 개의 행, A는 (1) = 하나의 행 및 제 2 열 A = (2)를 가져야한다.
그러나이 두 각 행의 b 쇼의 값을해야합니까? 이 각각의 경우에 세 가지 가능성이 있고, 쿼리에 아무는 각 그룹 B에 대한 선택하는 값을 취소하지 않습니다. 그것은 모호한입니다.
, 이것은 당신이 GROUP BY 쿼리를 실행할 때 당신이 얻을 정의되지 않은 결과를 금지하는 단일 값 규칙을 보여줍니다, 당신은 그룹화 기준도 일부 않으며, (집계 함수에 SUM을 표시 선택 목록의 모든 열을 포함 MIN, MAX, 등).
그것은 다음과 같을 수 수정 :
SELECT a, MAX(b) AS x FROM T GROUP BY a
이제 다음과 같은 결과를 원하는 것이 분명 :
a x -------- 1 ghi 2 pqr
-
==============================
2.당신이 비활성화 ONLY_FULL_GROUP_BY 서버 모드로 설정하면 쿼리는 MYSQL에서 작동합니다 (기본적으로는)입니다. 그러나이 경우, 당신은 다른 RDBMS를 사용하고 있습니다. 따라서, 쿼리 작업을 절, 예를 들면하여 그룹에 모든 비 집계 열을 추가합니다
당신이 비활성화 ONLY_FULL_GROUP_BY 서버 모드로 설정하면 쿼리는 MYSQL에서 작동합니다 (기본적으로는)입니다. 그러나이 경우, 당신은 다른 RDBMS를 사용하고 있습니다. 따라서, 쿼리 작업을 절, 예를 들면하여 그룹에 모든 비 집계 열을 추가합니다
SELECT col1, col2, SUM(col3) totalSUM FROM tableName GROUP BY col1, col2
열에 등 SUM, MAX, COUNT 같은 집계 함수로 전달되지 않은 열 수단은 비 응집 ..
-
==============================
3.그것은 당신이 원하는 것은 회사의 모든 직원을 나열 할 SQL 문 출력을위한처럼 들리지만, 애너하임 사무실에서 처음으로 모든 사람, 다음 버팔로 사무실에있는 사람들, 그 클리블랜드 사무실에있는 사람들 (A, B, C는 그것을 얻을, 분명히 나는) 당신이 어떤 위치 모른다.
그것은 당신이 원하는 것은 회사의 모든 직원을 나열 할 SQL 문 출력을위한처럼 들리지만, 애너하임 사무실에서 처음으로 모든 사람, 다음 버팔로 사무실에있는 사람들, 그 클리블랜드 사무실에있는 사람들 (A, B, C는 그것을 얻을, 분명히 나는) 당신이 어떤 위치 모른다.
이 경우, 문에 의해 그룹을 잃게됩니다. 당신이 필요로 ORDER BY loc.LocationID입니다
-
==============================
4.기본적으로, 어떤이 오류가 말하고있는 것은 당신이 GROUP BY 절을 사용하려는 경우, 당신의 결과는 당신은 단지 "선택"을 할 수 있습니다 SELECT 문에 이렇게 각 그룹에 대한 행과의 관계 / 테이블 될 것입니다 것입니다 당신이에 의해 그룹화 및 다른 열이 결과 테이블에 표시되지 않기 때문에 해당 컬럼에 집계 함수를 사용하는 것을 열입니다.
기본적으로, 어떤이 오류가 말하고있는 것은 당신이 GROUP BY 절을 사용하려는 경우, 당신의 결과는 당신은 단지 "선택"을 할 수 있습니다 SELECT 문에 이렇게 각 그룹에 대한 행과의 관계 / 테이블 될 것입니다 것입니다 당신이에 의해 그룹화 및 다른 열이 결과 테이블에 표시되지 않기 때문에 해당 컬럼에 집계 함수를 사용하는 것을 열입니다.
from https://stackoverflow.com/questions/13999817/reason-for-column-is-invalid-in-the-select-list-because-it-is-not-contained-in-e by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 첫번째 날짜 오름차순, 널 (null)에 의해 PostgreSQL의 종류? (0) | 2020.03.08 |
---|---|
[SQL] 왼쪽은 NULL이 WHERE IS 가입 대 NOT이 NOT IN 대 EXISTS 사이의 차이점은 무엇입니까? (0) | 2020.03.08 |
[SQL] 단일 SQL 쿼리에서 여러 행을 삽입? [복제] (0) | 2020.03.08 |
[SQL] SQL 논리 연산자 우선 순위 : AND와 OR (0) | 2020.03.08 |
[SQL] MySQL은 - 선택에 행 번호를 가져옵니다 (0) | 2020.03.08 |