2011-10-23 3 views
1

:私の選択ではMySQLで条件付きでcmをcmに変換する方法(またはSELECT中の同様の変換)?私は次のような表持つ

value unit 
----- ----- 
100  cm 
30  in 
120  cm 
35  in 
37  in 
29  in 

を、私はセンチメートルにインチを変換したいと思います。以下のような何か:

SELECT AVG(unit = in ? value*2.54 : value) FROM data_table; 

適切な構文、またはMySQLではこのタイプの選択を実行するための方法は何ですか?

+0

これは保存中に変換することもできます。保存は1回だけですが、選択は何度も行われるためです。 – Mikhail

答えて

4
SELECT AVG(value) FROM (
    SELECT 
    CASE unit 
     WHEN "cm" THEN value 
     WHEN "in" THEN value*2.54 
     END AS value 
    FROM data_table 
) AS all_in_cm 
1
SELECT CASE d.Unit 
     WHEN 'in' THEN d.Value * 2.54 
     ELSE d.Value 
     END AS centemeters 
FROM data_table at d; 
2

サブクエリのない単一のSELECTにあなたはでした 'ロールアップ' @Mikhailのソリューション:

SELECT AVG(value * CASE unit WHEN 'cm' THEN 1 WHEN 'in' THEN 2.54 END) 
FROM data_table 

また、あなたはこのように、ユニットの小さなルックアップ副選択を使用することができます。

SELECT AVG(d.value * u.factor) 
FROM data_table d 
    INNER JOIN (SELECT 'cm' AS unit, 1 AS factor UNION ALL SELECT 'in', 2.54) u 
    ON d.unit = u.unit 
+0

+1巧妙なルックアップは、別の*実際のテーブルにそれをスローすることができます:) – Mikhail

0
CREATE FUNCTION CONV_IN_CM (measurement INT, base_type ENUM('in','cm')) 
RETURNS FLOAT(65,4) 
DETERMINISTIC 
RETURN IF(base_type = 'in', measurement * 2.54, 
     IF(base_type = 'cm', measurement/2.54, NULL)); 

Be lowはこのコマンドの構文です。角括弧内のテキスト([および])はオプションです。選択肢はバーで区切られています(|)。コンマで始まる楕円は、繰り返しパターンを示します。構文の前後の楕円は、より大きい構文以外の関連項目を強調表示するために使用されます。斜体で表示されたテキストは、データベースに関連する特定の名前(たとえば、列の名前を持つ列)で置き換えられるテキストを表します。

CONV_IN_CM(measurement, {in | cm}) 
関連する問題