MySQL中位数计算方法
短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
在网上搜到的一种算法是利用自增长变量进行排序,然后再根据位置序号取。感觉有些复杂了,还是group_concat来的省事些
按顺序聚合,逗号分隔,并计数
group_concat( number order by number asc)
根据逗号拆分,判断奇偶数去截取中间位置的那个数
具体代码如下:
SELECT
doctor_name doctor, -- 分组
count(1) patientNum, -- 总数
group_concat(dnt order by dnt asc),
substring_index(SUBSTRING_INDEX(group_concat(dnt order by dnt asc),‘,‘,(count(1)+1) div 2),‘,‘,-1) dnt,
case when count(1)%2=1 then substring_index(SUBSTRING_INDEX(group_concat(dnt order by dnt asc),‘,‘,(count(1)+1) div 2),‘,‘,-1) else (substring_index(SUBSTRING_INDEX(group_concat(dnt order by dnt asc),‘,‘,(count(1)+2) div 2),‘,‘,-1) +
substring_index(SUBSTRING_INDEX(group_concat(dnt order by dnt asc),‘,‘,count(1) div 2),‘,‘,-1))/2
end mid_dnt
FROM
(
SELECT distinct doctor_name, record_id, dnt
from rp_green_channel_patient_detaile
where dnt is not null
AND visit_day >= ‘2020-03-30‘
AND visit_day <= ‘2020-06-27‘
) AS a
group by doctor_name
MySQL中位数计算方法
原文地址:https://www.cnblogs.com/skyEva/p/13362371.html
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341