我想做如下工作:
SELECT AVG([1,2,3]);
这当然会返回2。我得到的最接近的结果是以下几点不太理想,但可以放在一行中:
drop table nums;
create temporary table nums (num int);
insert into nums(num) values(1),(2),(3);
select avg(num) from nums;
如果有一种方法,我会假设这也可能与其他函数,如variance()和其他。
编辑:这个想法是出于好奇,不是我需要解决的真正问题。
3条答案
按热度按时间syqv5f0l1#
平均值只能有一个参数。你需要这样做
SELECT AVG(num) FROM nums
你也可以这样做SELECT SUM(num) / COUNT(num) FROM nums
只需知道,因为您使用整数进行除法,所以它将不精确。cygmwpex2#
我还认为mysql可能不是正确的工具(因为您不想存储数字),但是您的问题的答案是:是的,如果您愿意,您可以使用mysql而不创建表。
我没有找到任何用于此的内置函数/结构,但我提出了以下解决方案。我的想法是创建一个自定义函数,它接受分隔字符串中的数字,然后拆分字符串并计算数字的平均值。下面是一个使用整数的实现。输入应该是
num,num,num
以此类推,它应该以一个数字结尾(参见末尾的示例)。在这里观看现场工作演示。
差异可能要复杂得多,但我希望你能理解。
2fjabf4q3#
你用错了工具来解决你的问题。
如果要计算列表的方差,可以使用某种脚本语言,比如php、python等。如果要先存储数据,然后才计算方差,当然可以使用mysql之类的语言。