源于对该内容的一些修改https://blog.youkuaiyun.com/meaijojo/article/details/8101867
原文中的方法:
SELECT * from
(
SELECT a1.Name, a1.Sales, COUNT(a2.sales) Sales_Rank
FROM Total_Sales a1, Total_Sales a2
WHERE a1.Sales < a2.Sales or (a1.Sales=a2.Sales and a1.Name = a2.Name)
GROUP BY a1.Name, a1.Sales
ORDER BY a1.Sales DESC, a1.Name DESC
) as tab WHERE tab.sales_rank=(select (count(*)+1) div 2 from total_sales);
---------------------
作者:meaijojo
来源:优快云
原文:https://blog.youkuaiyun.com/meaijojo/article/details/8101867
版权声明:本文为博主原创文章,转载请附上博文链接!
个人对其作出一些修改,适用于更普遍的表:
SELECT AVG(sales)
FROM(
SELECT a1.Name, a1.Sales, COUNT(a2.sales) Sales_Rank
FROM Total_Sales a1, Total_Sales a2
WHERE a1.Sales < a2.Sales or (a1.Sales=a2.Sales and a1.Name = a2.Name)
GROUP BY a1.Name, a1.Sales
ORDER BY a1.Sales DESC, a1.Name DESC
) as tab
WHERE tab.sales_rank=(select FLOOR((count(*)+1)/2) from total_sales)
or tab.sales_rank=(select CEIL((count(*)+1)/2) from total_sales)
存在问题,修改后却无法解决 原文中的中间两个数等值问题。
ps:对数据库的学习和认识并不深,如有错误 希望能得到指正,谢谢。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
另有博主有更好的方法,个人认为方法很巧妙!很厉害!
https://blog.youkuaiyun.com/NextAction/article/details/80421854
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;