【问题标题】:TSL / SQL PERCENTILE_CONT should return 1 recordTSL / SQL PERCENTILE_CONT 应该返回 1 条记录
【发布时间】:2013-06-21 15:19:30
【问题描述】:

我正在处理一个 T-SQL 查询(我正在运行一个 SQL Server 数据库),它应该从值列表中计算中值。查询如下所示:

SELECT 
   PERCENTILE_CONT(0.5) OVER (ORDER BY age) as Age 
FROM 
   peopleDB 
WHERE 
   <expressions>;

数据库有 100 行。该查询返回中位数(相同的值)100 次,但我的目标是只返回一次。我一直在尝试以多种方式使用DISTINCTGROUP BY,但每次都会返回语法错误。数据库目前不支持DISTINCT

有没有可能我忽略了一些明显的东西?

【问题讨论】:

    标签: sql sql-server group-by distinct-values percentile


    【解决方案1】:

    我遇到了同样的问题,阅读这篇文章帮助我实现了解决方案。所以你的问题的 SQL 语法(因为我不熟悉 TSQL)是:

    SELECT 
       Distinct PERCENTILE_CONT(0.5) within group (ORDER BY age) over () as Age 
    FROM 
       peopleDB 
    WHERE 
       <expressions>;
    

    为我工作!

    【讨论】:

      【解决方案2】:

      尝试一个空的 over 子句。

      SELECT 
         PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY <column>) OVER () as Age 
      FROM 
         peopleDB 
      WHERE 
         <expressions>;
      

      【讨论】:

        【解决方案3】:

        我从未听说过 TSL。但是,以下其中一项可能有效:

        SELECT PERCENTILE_CONT(0.5) OVER (ORDER BY age) as Age
        FROM peopleDB
        WHERE <expressions>
        limit 1;
        
        SELECT top 1 PERCENTILE_CONT(0.5) OVER (ORDER BY age) as Age
        FROM peopleDB
        WHERE <expressions>;
        
        SELECT max(PERCENTILE_CONT(0.5) OVER (ORDER BY age)) as Age
        FROM peopleDB
        WHERE <expressions>;
        
        select max(age)
        from (SELECT top 1 PERCENTILE_CONT(0.5) OVER (ORDER BY age) as Age
              FROM peopleDB
              WHERE <expressions>
             ) t
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-11
          • 1970-01-01
          相关资源
          最近更新 更多