MySQL VIEW,列为其他3个VIEW列的组合排名

时间:2012-10-06 21:00:07

标签: mysql view percentile

忍受我,我是SQL.stupid。我终于知道在可能的情况下应该使用视图而不是crons。现在,我在一个视图问题中有一个视图。

我的筹码朋友给了我这么多:

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 Clarity

在我的情况下,百分位数是针对重复调整的给定列的从最高到最低的百分比排名。因此,对于具有100个值的列,具有最大值的列将是100%,具有最低值的列将是0%(或者它将是1%?)。如果有100个但有50个重复,那么最后两个将分享2%。

1 个答案:

答案 0 :(得分:0)

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,则会收到有关未知列的错误。

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