Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL视图,列为其他3个视图列的组合列_Mysql_View_Percentile - Fatal编程技术网

MySQL视图,列为其他3个视图列的组合列

MySQL视图,列为其他3个视图列的组合列,mysql,view,percentile,Mysql,View,Percentile,容忍我,我是个傻瓜。我终于了解到,如果可能的话,应该使用视图而不是cron。现在,我在一个视图问题中有了一个视图 我的朋友们让我走了这么远: CREATE VIEW tbl.sums as SELECT table2.id, SUM( table1.column1 * 2 ) as column1Sum, SUM( table1.column2 * 2 ) as column2Sum, SUM( table1.column3 * 2 ) as column3Sum FROM tab

容忍我,我是个傻瓜。我终于了解到,如果可能的话,应该使用视图而不是cron。现在,我在一个视图问题中有了一个视图

我的朋友们让我走了这么远:

CREATE VIEW tbl.sums as SELECT 

table2.id, 

SUM( table1.column1 * 2 ) as column1Sum,

SUM( table1.column2 * 2 ) as column2Sum,

SUM( table1.column3 * 2 ) as column3Sum

FROM table1, table2
WHERE table1.table2_id = table2.id GROUP BY table2.id
我想在视图的第5列中加入其他3列的权重相等的列

因此,这个方程类似于(1/3)*百分位数(column1Sum)+(1/3)*百分位数(column2Sum)+(1/3)*百分位数(column3Sum),其中“percentile()”是该列相对于该列其余部分的百分位数排名

请原谅不够清晰。这真的不是我的专长。将根据需要进行编辑

提前非常感谢

百分位清晰度

在我的例子中,percentile是针对重复调整的给定列从最高到最低的百分比排名。所以对于一个有100个值的列,最大的是100%,最小的是0%(或者是1%?)。如果有100个但有50个重复,那么最后两个将共享2%

CREATE VIEW tbl.sums as SELECT 
    tmp.*,
    (1/3)*(tmp.column1Sum+tmp.column2Sum+tmp.column3Sum)
FROM (
    SELECT 
        table2.id, 
        SUM( table1.column1 * 2 ) as column1Sum,
        SUM( table1.column2 * 2 ) as column2Sum,
        SUM( table1.column3 * 2 ) as column3Sum
    FROM table1, table2
    WHERE table1.table2_id = table2.id GROUP BY table2.id
) AS tmp
这个等式对我来说没有多大意义,我想一定是出了什么问题,或者我没有真正得到百分位数应该是什么。。。所以我只放了随便什么,只要它取决于子查询的字段

如果您没有使用子查询,而是直接使用
column1Sum
,则会得到一个关于未知列的错误


否则,您可以重写用于计算总和的公式,而不是使用其名称。但我想这对于您的用例来说并不实用。

我想在您的用例中,您将需要这个。因为对于百分位数计算,您需要3样东西:所有数据、最小/最大值以及基于这些数据的计算。所以您将有一个用于计算的查询和两个带有其他数据的“子查询”。但是,以PHP为例,您可以在一个查询中获取所有数据,并基于该数据进行处理。我不知道在性能方面什么是最好的方法,但我个人更喜欢在代码中只使用一个查询和进程,除非我有一个非常好的ORM,它将为我创建SQL(我并不擅长:)。曾经有一段时间我喜欢编写SQL。。。直到我发现了一只甲虫。然后我坠入了爱河P