将中位数计算从 MySQL 转换为 SQL 服务器
Conversion of median calculation from MySQL to SQL Server
我正在尝试将 MySQL 中的中位数计算转换为 SQL 服务器。
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
遗憾的是我不知道如何克服这个错误:
A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations.
我知道还有一些其他方法可以计算中位数,它们是 SQL 服务器特定的,但不知道如何进行这种转换让我很吃力。
当你可以做这样的事情时,你为什么要转换那个代码?
select distinct gender, percentile_cont(0.5) over (partition by gender order by height)
from heights;
SQL服务器有很多其他的计算方法。
我正在尝试将 MySQL 中的中位数计算转换为 SQL 服务器。
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
遗憾的是我不知道如何克服这个错误:
A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations.
我知道还有一些其他方法可以计算中位数,它们是 SQL 服务器特定的,但不知道如何进行这种转换让我很吃力。
当你可以做这样的事情时,你为什么要转换那个代码?
select distinct gender, percentile_cont(0.5) over (partition by gender order by height)
from heights;
SQL服务器有很多其他的计算方法。