Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 聚合函数未按预期工作_Sql_Oracle - Fatal编程技术网

Sql 聚合函数未按预期工作

Sql 聚合函数未按预期工作,sql,oracle,Sql,Oracle,我在写一个查询,从一个表中找出中间值。该表有一列,包含从1到106的连续自然数 CREATE TABLE med AS (SELECT rs FROM ( SELECT rownum rs FROM employees WHERE employee_id<=106)); 我成功地执行了查询,找到这106个自然数的中位数为53.5 SELECT AVG(median) FROM ( SELECT a.rs median

我在写一个查询,从一个表中找出中间值。该表有一列,包含从1到106的连续自然数

CREATE TABLE med 
AS (SELECT rs 
    FROM ( SELECT rownum rs
           FROM employees
           WHERE employee_id<=106));
我成功地执行了查询,找到这106个自然数的中位数为53.5

SELECT AVG(median)
FROM (
        SELECT a.rs median
        FROM med a,
             med b
        GROUP BY a.rs
        HAVING  SUM(CASE 
                        WHEN b.rs<=a.rs THEN 1
                        ELSE 0
                    END)>=(COUNT(*)/2)
        AND     SUM(CASE 
                        WHEN b.rs>=a.rs THEN 1
                        ELSE 0
                    END)>=(COUNT(*)/2));
但是在使用聚合函数AVG而不使用子查询时,如下所示:

SELECT AVG(a.rs) median
        FROM med a,
             med b
        GROUP BY a.rs
        HAVING  SUM(CASE 
                        WHEN b.rs<=a.rs THEN 1
                        ELSE 0
                    END)>=(COUNT(*)/2)
        AND     SUM(CASE 
                        WHEN b.rs>=a.rs THEN 1
                        ELSE 0
                    END)>=(COUNT(*)/2)

然后它没有给出53.5的预期输出,而是给出53,54的输出。为什么会这样?

这是因为在使用子查询的第一次查询中,您正在计算53和54之间的平均值

在不带子查询的第二次查询中,将执行聚合函数,但它分别对每个值执行,即AVG53和AVG54。这就是为什么您要返回2行


我希望您能明白。

,请提供示例数据和预期输出。@Mansoor该表有一个名为rs的单列,由1到106的连续自然数组成。列数据类型?为供将来参考,Oracle SQL提供了