2011-09-25 3 views
8

비교왜이 쿼리는 널 (null)

SELECT distinct u_id,timestamp as time 
FROM my_table; 

하고있는 행을 반환하지

SELECT distinct u_id,max(timestamp) as time 
FROM my_table; 

내 표는 전혀 행이없는 경우 (또는 내가 추가 할 경우 어디 행과 일치하지 절) :

전은 빈 결과 집합을 반환합니다. (나는 예상 한 것입니다) 나중에 두 필드의 값으로 null을 가진 단일 행을 반환합니다.

제발 누군가 제게 설명해 주시겠습니까?

답변

16

MySQL의 문서는 매칭되는 열이없는 경우

MAX()가 NULL을 반환했다.

데이터가없는 경우 두 값을 모두 NULL로 반환합니다.

당신은 두 번째 쿼리가 너무 빈 결과 집합을 반환 한 후 당신이 집계 함수와 함께 사용할 수있는 절을 갖는 예를 들어 NULL 값을 필터링해야합니다 :

SELECT DISTINCT u_id, MAX(timestamp) as time FROM my_table GROUP BY u_id HAVING time IS NOT NULL; 
+2

이것은 기술적으로 절반 만 답할 수 있습니다. 나머지 절반은 집계 함수를 비 집계와 혼합하여 두 번째에 group-by 절이 없기 때문에 u_id가 'NULL'인 이유입니다. – tobyodavies

0

이 질문에 대한이 실제 대답 아무리해도 설명하기가 복잡합니다. 제목 : SQL은 관계형 모델에서 발견되는 집계 연산자를 지원하지 않으며, 단지 요약의 특별한 경우를 지원합니다. 또한 SQL에는 하나의 데이터 구조 만 있기 때문에 테이블 - SQL 집계 연산자 호출 (느슨하게 말하면)이 일부 테이블 표현식의 일부로 나타나야합니다. 따라서 두 번째 테이블이 왜 '더미'단일 행을 반환하는지 확인해야합니다.

더 자세한 설명은 SQL and Relational Theory: How to Accurate SQL Code - C. J. Date (2009), 7.5 섹션을 참조하십시오. 집계 연산자.