Как условно преобразовать дюймы в сантиметры в MySQL (или аналогичные преобразования во время SELECT)? - PullRequest
1 голос
/ 23 октября 2011

У меня есть таблица, подобная следующей:

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?

Ответы [ 4 ]

4 голосов
/ 23 октября 2011
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
2 голосов
/ 23 октября 2011

Вы можете «свернуть» решение @ 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
1 голос
/ 23 октября 2011
SELECT CASE d.Unit
        WHEN 'in' THEN d.Value * 2.54
        ELSE d.Value
       END AS centemeters
FROM data_table at d;
0 голосов
/ 27 ноября 2013
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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...