【发布时间】:2013-04-24 06:15:52
【问题描述】:
我有以下运行良好的 MySQL 查询:
select
count(*) as `# of Data points`,
name,
max((QNTY_Sell/QNTYDelivered)*1000) as `MAX Thousand Price`,
min((QNTY_Sell/QNTYDelivered)*1000) as `MIN Thousand Price`,
avg((QNTY_Sell/QNTYDelivered)*1000) as `MEAN Thousand Price`
from
table_name
where
year(date) >= 2012 and
name like "%the_name%" and
QNTYDelivered > 0 and
QNTY_Sell > 0
group by name
order by name;
现在我还希望添加一个结果列,它为我提供每行数据的 MEDIAN。在SELECT 下,这在完美世界中应该是这样的:
median((QNTY_Sell/QNTYDelivered)*1000) as `MEDIAN Thousand Price`
在 Google 中搜索 MySQL 中值函数让我得到了这个答案,如果您对整个表的数据集的中值感兴趣,这似乎没问题:Simple way to calculate median with MySQL
这里的不同之处在于,我是按name 列对表中的数据进行分组,并希望得到按此列分组的每一行数据的中位数。
有谁知道允许我这样做的绝妙技巧吗?
谢谢!
【问题讨论】:
-
mysql中没有中值函数
-
必须在同一个查询中吗?如果您可以运行第二个查询,您可以计算集合的中点,因为您知道数据点的数量。中点是一排或两排。运行相同的查询,但添加 LIMIT [midpoint], [midpoint mod 2] 并返回平均值。
-
如果您执行上述操作,您将不得不更改订单 - 我假设您想要 QNTY_Sell/QNTYDelivered 的中位数,因此您必须对其进行排序才能找到中点。跨度>
标签: mysql sql statistics median