我有一张类似于以下内容的表格:
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 :(得分: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 :(得分:2)
您可以将@Mikhail的解决方案“汇总”到没有子查询的单个SELECT中:
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
答案 2 :(得分:1)
SELECT CASE d.Unit
WHEN 'in' THEN d.Value * 2.54
ELSE d.Value
END AS centemeters
FROM data_table at d;
答案 3 :(得分: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));
以下是此命令的语法。方括号内的文本(即[和])是可选的。选项由条(即|)分隔。以逗号开头的省略号表示重复模式。除了较大的语法之外,语法之前或之后的省略号用于突出显示相关的。以斜体字母显示的文本表示应替换为与数据库相关的特定名称的文本(例如,具有列名称的列)。
CONV_IN_CM(measurement, {in | cm})