join计算中间值?

e4eetjau  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(219)

我有一个名为“毕业生”的表格,记录不同毕业生的姓名和收入。现在我需要计算收入的中位数。这是一本书的代码。
我的问题是
有从句的结果是什么?
自连接的结果是什么?

SELECT AVG(DISTINCT income)
FROM (
       SELECT T1.income
       FROM Graduates T1, Graduates T2
       GROUP BY T1.income
       HAVING SUM(CASE WHEN T2.income >= T1.income THEN 1 ELSE 0 END) 
                   >= COUNT(*) / 2 
           AND SUM(CASE WHEN T2.income <= T1.income THEN 1 ELSE 0 END) 
                   >= COUNT(*) / 2 
       ) TMP;
prdp8dxp

prdp8dxp1#

代码所做的是找到一个或两个中间值。它是通过计算大于或小于该值的值的数目来实现的。
每个 SUM() 他在房间里 HAVING 子句计算大于或小于给定值的值的数目 income . 这个表达式所做的是这样说:
中间值是指具有相同数量的大于或小于自身的值。
中位数就是中间值的平均值。如果有,那么平均值就是值本身。如果有两个,平均值就是中间值。
这很糟糕,原因有很多:
它只对数值有效。但是中位数也被定义为字符串和日期。
它需要一个自连接,这是昂贵的。
这是相当难以理解的。
如何在组内而不是在整个数据集上获取中间值并不明显。

相关问题