복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    3.그것은 당신이 원하는 것은 회사의 모든 직원을 나열 할 SQL 문 출력을위한처럼 들리지만, 애너하임 사무실에서 처음으로 모든 사람, 다음 버팔로 사무실에있는 사람들, 그 클리블랜드 사무실에있는 사람들 (A, B, C는 그것을 얻을, 분명히 나는) 당신이 어떤 위치 모른다.

    그것은 당신이 원하는 것은 회사의 모든 직원을 나열 할 SQL 문 출력을위한처럼 들리지만, 애너하임 사무실에서 처음으로 모든 사람, 다음 버팔로 사무실에있는 사람들, 그 클리블랜드 사무실에있는 사람들 (A, B, C는 그것을 얻을, 분명히 나는) 당신이 어떤 위치 모른다.

    이 경우, 문에 의해 그룹을 잃게됩니다. 당신이 필요로 ORDER BY loc.LocationID입니다

  4. ==============================

    4.기본적으로, 어떤이 오류가 말하고있는 것은 당신이 GROUP BY 절을 사용하려는 경우, 당신의 결과는 당신은 단지 "선택"을 할 수 있습니다 SELECT 문에 이렇게 각 그룹에 대한 행과의 관계 / 테이블 될 것입니다 것입니다 당신이에 의해 그룹화 및 다른 열이 결과 테이블에 표시되지 않기 때문에 해당 컬럼에 집계 함수를 사용하는 것을 열입니다.

    기본적으로, 어떤이 오류가 말하고있는 것은 당신이 GROUP BY 절을 사용하려는 경우, 당신의 결과는 당신은 단지 "선택"을 할 수 있습니다 SELECT 문에 이렇게 각 그룹에 대한 행과의 관계 / 테이블 될 것입니다 것입니다 당신이에 의해 그룹화 및 다른 열이 결과 테이블에 표시되지 않기 때문에 해당 컬럼에 집계 함수를 사용하는 것을 열입니다.

  5. 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