MySql в MsSql преобразование (медиана) - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь преобразовать это медианное вычисление в MySQL в MsSql http://danielsetzermann.com/howto/how-to-calculate-the-median-per-group-with-mysql/

Вот код для простоты

SET @row_number:=0; 
SET @median_group:='';

SELECT 
    median_group, AVG(height) AS median
FROM
    (SELECT
        @row_number:=
            CASE
            WHEN @median_group = gender THEN @row_number + 1
            ELSE 1
            END AS count_of_group,
        @median_group:=gender AS median_group,
        gender,
        height,
        (SELECT 
            COUNT(*)
        FROM heights
        WHERE a.gender = gender)
        AS total_of_group
    FROM
        (SELECT 
            gender,
            height
        FROM heights
        ORDER BY gender, height)
        AS a)
    AS b
    WHERE
        count_of_group BETWEEN total_of_group / 2.0 AND total_of_group / 2.0 + 1
GROUP BY median_group

Это насколько я получил

DECLARE @row_number integer, @median_group varchar(100)
SET @row_number = 0
SET @median_group = ''

SELECT
  @row_number = (CASE WHEN @median_group = gender THEN @row_number + 1 ELSE 1 END) AS count_of_group,
  (@median_group = gender) AS median_group,
  gender,
  height,
  (SELECT COUNT(*)
   FROM heights
   WHERE a.gender = gender)
   AS total_of_group
FROM
  (SELECT
     gender,
     height
  FROM heights)
  AS a
ORDER BY a.gender , a.height

К сожалению, я не знаю, как обойти эту ошибку - оператор SELECT, который присваивает значение переменной, не должен сочетаться с операциями извлечения данных.

Любая помощь очень ценится

Я знаю, что есть несколько других способов вычислить медиану, которые специфичны для MsSql, но незнание того, как сделать это преобразование, съедает меня.

Супер Спасибо за продвинутый

1 Ответ

0 голосов
/ 26 апреля 2018

Зачем вам преобразовывать этот код, если вы можете сделать что-то подобное?

select distinct gender, percentile_cont(0.5) over (partition by gender order by height)
from heights;

В SQL Server есть много других подходов для такого расчета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...