[SQL] 왜 집계 함수는 where 절에서 허용되지 않습니다
SQL왜 집계 함수는 where 절에서 허용되지 않습니다
나는이에 대한 명확한 설명을 찾고 있어요. 나는 아래의 두 쿼리를 작성하고 있습니다 :
우리는 열 ID, 이름, 급여와 직원 이름의 테이블이
1. Select name from employee
where sum(salary) > 1000 ;
2. Select name from employee
where substring_index(name,' ',1) = 'nishant' ;
쿼리 1은 작동하지 않지만 쿼리 2는 작업을 수행합니다. 이것이에 내 개발 경험에서, 나는 가능한 설명을 느낄 :
쿼리 SUBSTRING_INDEX 2- 일 ()은 하나의 값에서 작동하며, 따라서 여기가 공급되는 값에 작동한다.
당신은 나의 이해의 유효성을 검사 할 수 있습니다.
해결법
-
==============================
1.그 이유는 당신이 절은 절의 평가 순서입니다 WHERE에 SUM ()를 사용할 수 없습니다.
그 이유는 당신이 절은 절의 평가 순서입니다 WHERE에 SUM ()를 사용할 수 없습니다.
FROM 어디에서 행을 읽는 방법을 알려줍니다. 행이 디스크에서 메모리로 읽어 오른쪽으로, 그들은 WHERE 조건을 검사합니다. (실제로 절에도 디스크에서 읽을 수 없습니다 어디 실패 대부분의 경우 행에 "조건"공식적으로 술어로 알려져 있으며, 일부 술어가 사용된다 -. 쿼리 실행 엔진 - 기본 테이블에서 읽 행을 결정합니다. 이러한 액세스 조건이라고합니다.) 당신이 볼 수 있듯이,이 엔진에 제시로 절을 각 행에 적용되는 WHERE.
반면에, 집계는 읽은 (모든 조건을 확인하는 것이)에만 모든 행 후에 완료됩니다.
만 조건을 만족하는 행에 적용) (SUM : 이것에 대해 생각하십시오. 당신은 WHERE 절에서 SUM ()를 두는 경우에, 당신은 순환 논리를 요구하고 있습니다. 새 행은 WHERE 절을 통과합니까? 어떻게 알아? 이 통과 할 경우, 나는 SUM에 포함해야하지만, 그렇지 않은 경우는 SUM에 포함되어서는 안된다. 그래서 어떻게 심지어 SUM 조건을 평가합니까?
-
==============================
2.집계 함수는 데이터 세트에서 작동합니다. A는 절은 전체 세트에 액세스 할 수 없습니다 WHERE 있지만 행에 현재에 작동하는지.
집계 함수는 데이터 세트에서 작동합니다. A는 절은 전체 세트에 액세스 할 수 없습니다 WHERE 있지만 행에 현재에 작동하는지.
당신은 물론 HAVING 절을 사용할 수 있습니다 :
select name from employee group by name having sum(salary) > 1000;
당신이 어디에 사용해야하는 경우, 당신은 하위 쿼리를 사용할 수 있습니다 :
select name from ( select name, sum(salary) total_salary from employee group by name ) t where total_salary > 1000;
-
==============================
3.합 ()는 집합 함수이다. 일반적으로, 당신은 그룹화 작업을 기대. 따라서, 귀하의 첫 번째 쿼리에 의해 그룹이 없습니다. 쿼리에 의해 그룹에서 응집 후에 필터링에 사용 갖는 :
합 ()는 집합 함수이다. 일반적으로, 당신은 그룹화 작업을 기대. 따라서, 귀하의 첫 번째 쿼리에 의해 그룹이 없습니다. 쿼리에 의해 그룹에서 응집 후에 필터링에 사용 갖는 :
Select name from employee group by name having sum(salary) > 1000 ;
-
==============================
4.조건이 충족되지 않을 때마다 쿼리 킵 다시 반복 갔다하기 때문에 실패하는 경우 동안 쿼리가 해당 열의 행에 직접가는 이후 가진 작품을 사용.
조건이 충족되지 않을 때마다 쿼리 킵 다시 반복 갔다하기 때문에 실패하는 경우 동안 쿼리가 해당 열의 행에 직접가는 이후 가진 작품을 사용.
from https://stackoverflow.com/questions/42470849/why-are-aggregate-functions-not-allowed-in-where-clause by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 내가 키 생성 BIGINT를 배출하면 어떻게됩니까? 어떻게 그것을 처리하기 위해? (0) | 2020.06.07 |
---|---|
[SQL] C #을 통해 ado.net를 사용하여 SQL Server 데이터베이스에 값을 삽입 (0) | 2020.06.07 |
[SQL] 내가 SUM을 사용하는 방법 () OVER () (0) | 2020.06.07 |
[SQL] 방법에 대한 오라클의 COMMIT 트리거를 정의? (0) | 2020.06.07 |
[SQL] 어떻게 2005 SQL Server에서 열로 임의의 숫자를 반환합니까? (0) | 2020.06.07 |