2011-09-13 2 views
0

이 함수에는 어떤 문제가 있습니다. 여기 내 예상 출력은MySQL은 동등한 수의 값 범위에 대한 함수를 만듭니다.

1 = 10 
2 to 3 = 7 
4 to 10 = 5 
11 to 30 = 2 
31 to 100 = 1 


DELIMITER $$ 
DROP FUNCTION IF EXISTS `computeScore`$$ 
CREATE DEFINER=`root`@`localhost` FUNCTION `computeScore`(`POS` INT(11)) RETURNS int(11) 
    READS SQL DATA 
    DETERMINISTIC 
BEGIN 
    DECLARE ordinal INT; 
    SELECT (
     CASE 
      WHEN POS < 2 THEN 10 
      WHEN POS >= 2 < 4 THEN 7 
      WHEN POS >= 4 < 11 THEN 5 
      WHEN POS >= 11 < 31 THEN 2 
      ELSE 1 
     END) 
    INTO ordinal; 
    RETURN ordinal; 
    RETURN 0; 
END; 

$$ 

DELIMITER ; 

출력입니다 : 난 항상 10

+0

실제 출력은 무엇입니까? – Poodlehat

+0

현재 출력은 무엇입니까? – CristiC

+0

출력을 추가하면 항상 10이됩니다 –

답변

0

이 시도 :

SELECT (
     CASE 
      WHEN POS < 2 THEN 10 
      WHEN POS >= 2 && POS < 4 THEN 7 
      WHEN POS >= 4 && POS < 11 THEN 5 
      WHEN POS >= 11 && POS < 31 THEN 2 
      ELSE 1 
     END) 
0

CASE 부분은

CASE 
     WHEN POS < 2 THEN 10 
     WHEN POS >= 2 AND POS < 4 THEN 7 
     WHEN POS >= 4 AND POS < 11 THEN 5 
     WHEN POS >= 11 AND POS < 31 THEN 2 
     ELSE 1 
    END 
0

어떤 문제가해야 얻을?

SELECT..INTO 약식 - 이 SELECT 구문은 선택한 열을 변수에 직접 저장합니다. 따라서 하나의 행만 검색 될 수 있습니다.

쿼리가 하나의 레코드를 반환하는지 확인하십시오.

편집 :

코드는 다음과 같이 할 수있다 -

SET ordinal = CASE 
    WHEN pos < 2 THEN 10 
    WHEN pos >= 2 AND pos < 4 THEN 7 
    WHEN pos >= 4 AND pos < 11 THEN 5 
    WHEN pos >= 11 AND pos < 31 THEN 2 
    ELSE 1 
END; 
+0

그리고 한 행이 있습니다. FROM은 사용되지 않습니다. – CristiC

+0

당신이 옳습니다. 그래서 대답은 도움이 될 것입니다. – Devart

+0

내 대답을 편집했습니다. – Devart