Calculating the Median with Mysql(用 Mysql 计算中位数)
问题描述
我在计算值列表的中位数时遇到问题,而不是平均值.
I'm having trouble with calculating the median of a list of values, not the average.
我找到了这篇文章使用 MySQL 计算中位数的简单方法
它引用了我不太理解的以下查询.
It has a reference to the following query which I don't understand properly.
SELECT x.val from data x, data y
GROUP BY x.val
HAVING SUM(SIGN(1-SIGN(y.val-x.val))) = (COUNT(*)+1)/2
如果我有一个 time 列并且我想计算中值,x 和 y 列指的是什么?
If I have a time column and I want to calculate the median value, what do the x and y columns refer to?
推荐答案
val 是你的时间列,x 和 y 是两个引用到数据表(可以写data AS x, data AS y).
val is your time column, x and y are two references to the data table (you can write data AS x, data AS y).
为了避免计算两次总和,您可以存储中间结果.
To avoid computing your sums twice, you can store the intermediate results.
CREATE TEMPORARY TABLE average_user_total_time
(SELECT SUM(time) AS time_taken
FROM scores
WHERE created_at >= '2010-10-10'
and created_at <= '2010-11-11'
GROUP BY user_id);
然后您可以计算命名表中这些值的中位数.
Then you can compute median over these values which are in a named table.
临时表 不起作用>这里.您可以尝试使用具有MEMORY"表类型的常规表.或者只是让您的子查询在您的查询中计算两次中位数的值.除此之外,我没有看到其他解决方案.这并不意味着没有更好的方法,也许其他人会提出一个想法.
Temporary table won't work here. You could try using a regular table with "MEMORY" table type. Or just have your subquery that computes the values for the median twice in your query. Apart from this, I don't see another solution. This doesn't mean there isn't a better way, maybe somebody else will come with an idea.
这篇关于用 Mysql 计算中位数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:用 Mysql 计算中位数
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- SQL 临时表问题 2022-01-01
- 更改自动增量起始编号? 2021-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
