0

この関数の何が問題なのですか。これが私の期待される出力です

 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 を取得します

4

3 に答える 3

0

なにが問題ですか?

SELECT..INTO statamentに関するリファレンスから-このSELECT構文は、選択した列を変数に直接格納します。したがって、取得できる行は1つだけです。

クエリが1つのレコードを返すことを確認します。

編集:

コードは次のようになります-

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;
于 2011-09-13T14:44:07.587 に答える
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 )
于 2011-09-13T14:45:04.180 に答える
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
于 2011-09-13T14:42:51.857 に答える