2016-07-01 2 views
3

좋아, 하나의 테이블이있는 데이터베이스에 테이블 A를 호출했다고 가정 해보십시오. 표 A Have Id int, sum int. 나는 합계 값의 평균보다 큰 테이블 A의 합계 값을 원한다. 이를 위해 이상한 (알 수 없음) MySql 동작

나는 두 쿼리 만든 :

SELECT 
    a.id 
FROM 
    TableA a, 
    (SELECT AVG(sum) AS mes FROM TableA) b 
WHERE 
    a.sum>b.mes; 


SELECT 
    a.id 
FROM 
    TableA a 
WHERE 
    a.sum > (SELECT AVG(a.sum)) 
GROUP BY 
    a.id; 

이러한 쿼리가 동일 내가 볼때,하지만 결과는 초 제 널 (null)에 대한 확인이다.

제 질문은 간단합니다. 두 번째 쿼리에 논리 오류가 있습니까? 그렇다면 이유를 설명 할 수 있습니까?

답변

3

예 이러한 두 개의 쿼리는 동일하지 않습니다. 첫 번째 쿼리에서 두 개의 개별 테이블로 처리하고 결과 집합을 가져 와서 마지막으로 비교하기 때문입니다. 당신이 경우에 집계 기능을 수행

하지만 두 번째 쿼리에서

개별 a.id

평균 얻을 것이다 당신은 내가 논리 오류가 있습니다

Select a.id from TableA a where a.sum = (Select avg(a.sum)) group by a.id; 
+0

그래서 두 번째 쿼리에서 테이블의 결과 집합을 다른 테이블과 비교하고 결과 집합과 비교하지 않는다는 의미입니다. – HasS

+0

답이 업데이트되었습니다. 두 번째 쿼리에서 –

+0

을 사용하여 그룹을 검사하여 a.id를 사용하여 그룹화 한 다음 각 그룹의 평균을 취하여 평균값이 해당 값과 같아 지도록하십시오. –

2

을 무슨 뜻인지 이해이를 실행합니다. 두 번째 쿼리는 두 테이블을 처리하지 않습니다.