mysql - 将中值计算从 MySQL 转换为 SQL Server
问题描述
我正在尝试将 MySQL 中的这个中值计算转换为 SQL Server。
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 语句不得与数据检索操作结合使用。
我知道还有其他几种方法可以计算特定于 SQL Server 的中位数,但不知道如何进行这种转换让我很吃惊。
解决方案
当您可以执行此类操作时,为什么要转换该代码?
select distinct gender, percentile_cont(0.5) over (partition by gender order by height)
from heights;
SQL Server 有许多其他方法可以进行此类计算。
推荐阅读
- java - SNMP 侦听器无法从作为表中条目的 OID 读取陷阱
- git - 用于处理开发分支中的多个项目的 Git 工作流标准
- react-native - 如何修复nativebase toast错误未定义不是对象(评估'this.toastInstance._root')
- awk - awk 中的分隔值
- docker - docker容器之间的执行
- css - CSS > 尝试设置按钮样式 - 必须有更简单的方法
- facebook - 更新到 https 后无法验证 facebook og meta
- python - 当我执行简单的 Kivy 代码时出现黑屏
- ios - 从钥匙串中删除所有钥匙
- c# - C# specflow Selenium 测试在本地运行良好(CLI 和 VS 2017 NUnit Runner)。但是在团队城市中失败并出现错误找不到元素