【问题标题】:Conversion of median calculation from MySQL to SQL Server将中值计算从 MySQL 转换为 SQL Server
【发布时间】:2018-10-06 14:30:22
【问题描述】:

我正在尝试将 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 的中位数,但不知道如何进行这种转换让我很吃惊。

【问题讨论】:

    标签: mysql sql sql-server tsql median


    【解决方案1】:

    当您可以执行此类操作时,为什么要转换该代码?

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

    SQL Server 有许多其他方法可以进行此类计算。

    【讨论】:

    • 感谢您的回复。我来自 mysql 世界,现在正在学习 mssql。 mysql 解决方案是我理解并在过去使用过的东西。最终我了解了多个 sql server 解决方案,但它仍然困扰着我,我无法转换它。所以这更像是一个关于mysql和sql server区别的学习经验]
    • @BayoO'liliJason' 。 . . MySQL(版本 8 之前)不是很好地介绍 ANSI SQL 和其他数据库的查询功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 2015-06-29
    • 2013-11-29
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多