本文是在mysql中查询一列奇数个数据的中位数。
在HackerRank刷题的时候遇到了一道需要查询中位数的题目。
题目
将中位数定义为:将数据集的上半部分与下半部分分开的数字,也就是仅存在一个中位数。
需要找出某列的中位数。
思路
Station表中存在奇数个数据,那么我们要查找的LAT_N就是将数据分开后使得:上半部分个数=下半部分个数。
于是我们需要在查询该表Station S的同时,再创建两个相同的Station表来计算上下部分的LAT_N个数,在检查记录的同时比较上下两部分的数量,当数量相同的时候,该S.LAT_N就是需要得到的中位数。
方案
1 | select round(s.LAT_N,4) |
个人收获
当遇到比较抽象的问题的时候,需要学会转换思路,将抽象的中位数定义,转化为现实的,上下部分数量相同问题;也要熟悉mysql中创建新表和原表比较的方法。