2011-08-24 4 views
5

편집 : 문제가 축소되었습니다. 여기에 간단한 예제 :최소/최대 기능으로 @variable을 사용하는 방법은 무엇입니까?

mysql> select * from table_a; 
+-------+ 
| col_a | 
+-------+ 
|  1 | 
|  2 | 
|  3 | 
|  4 | 
+-------+ 
4 rows in set (0.00 sec) 

mysql> select @a:=max(col_a),@a from table_a; 
+----------------+------+ 
| @a:=max(col_a) | @a | 
+----------------+------+ 
|    4 | NULL | 
+----------------+------+ 
1 row in set (0.00 sec) 

NULL@a이다, 그리고 나는 그것을이되지 에 어떻게받을 수 있나요?

+1

내가 잘못된 긍정적 결과를 얻은 별칭을 테스트 할 때 어리석은 실수를 저질렀습니다. 대답을 삭제했습니다. – nobody

답변

5

MySql manual 견적, 이것에 대해 매우 분명하다

는 일반적으로, 당신은 사용자 변수에 값을 할당하지 않고 동일한 명령문 내에서 값을 읽어 안됩니다. 기대하는 결과를 얻을 수도 있지만 이것이 보장되는 것은 아닙니다. 사용자 변수가 포함 된 표현식에 대한 평가 순서는 정의되지 않았으며 주어진 구문에 포함 된 요소에 따라 변경 될 수 있습니다. 또한이 순서는 MySQL 서버 릴리스간에 동일하지 않을 수도 있습니다. SELECT @a, @a : = @ a + 1, ...에서 MySQL이 @a를 먼저 평가 한 다음 두 번째 할당을한다고 생각할 수 있습니다. 그러나 (예를 들어, GROUP BY, HAVING 또는 ORDER BY 절을 추가하여) 명령문을 변경하면 MySQL에서 다른 순서의 평가 순서로 실행 계획을 선택할 수 있습니다.

1

대부분의 경우 집계 함수를 통해 반환되는 모든 열을 사용할 수 있습니까? 다른 단어에서

은, 당신이 진정
찾고있는 추측 (다시 질문을 업데이트 던 마음?)

정상적인 사용

select max(col_a) as anything 
from table_a 
order by anything; 

내가 던 볼에 어렵다 이 중 하나라도 해를 끼치는 경우

select max(col_a) as anything, max(col_a) as anything2, 
from table_a 
order by anything, anything2; 

시도하는 경우 이 선택에

사용자 정의 변수 행할 수 없다
, LIMIT 골재 기능을 사용 보내고 것은 신뢰할 수없는로서

http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

(I는 팬으로 사용) 일반 규칙 사용자 변수에 값을 지정하고 동일한 문 내에서 값을 읽지 마십시오.. 기대하는 결과를 얻을 수도 있지만 이것이 보장되는 것은 아닙니다. 사용자 변수가 포함 된 표현식에 대한 평가 순서는 정의되지 않았으며 주어진 구문에 포함 된 요소에 따라 변경 될 수 있습니다. 또한이 순서는 MySQL 서버 릴리스간에 동일하지 않을 수도 있습니다. SELECT @a, @a : = @ a + 1, ...에서 MySQL이 @a를 먼저 평가 한 다음 두 번째 할당을한다고 생각할 수 있습니다. 그러나 (예를 들어, GROUP BY, HAVING 또는 ORDER BY 절을 추가하여) 명령문을 변경하면 MySQL에서 다른 순서의 평가 순서로 실행 계획을 선택할 수 있습니다.

+0

허 ..? 이거 좀 더 설명 할 수 있니? 'stamp_date'는 유닉스 타임 스탬프를 저장하는'INT'입니다. 변수에'MIN (stamp_date)'를 넣고 싶습니다. 쿼리에서 여러 번 다시 사용해야하기 때문입니다.귀하의 질의는 'MIN (stamp_date)'에 대한 참조조차하지 않습니다. 오 ....... 당신은 분이 될 첫 번째 stamp_date를 내리고 있습니다. 그렇지 않습니까? 왜 그게 효과가 있겠지만, '최소'는 아닌가? – mpen

+0

좋아, 당신은'substring_index' 광란은 실제로 'MIN'이했던 것과 같은 값을 검색하지만, 이것이 어떻게 해결되는지는 모르겠다. 나는 여전히 변수에 던져서 다시 사용할 수 없다. – mpen

+0

일단 start_time 값이 있으면 – ajreal

관련 문제