按正数和负数计算排名

时间:2017-11-07 21:51:35

标签: sql postgresql statistics

我有一个包含2列的表:

monthly_sales, quality_score

我想通过 monthly_sales最低 quality_score的某些功能来订购这些功能。

如果我的数据是:

id, monthly_sales, quality_score
1,  10000,        30
2,  100,          10
3,  20000,        20
4,  100000,       10
5,  100000,       90
6,  20000,        90
7,  200,          20

希望看到类似的内容:

id, monthly_sales, quality_score
4,  100000,       10
3,  20000,        20
1,  10000,        30
5,  100000,       90
6,  20000,        90
2,  100,          10
7,  200,          20

我知道不希望ORDER BY quality_score ASC, monthly_sales DESC,因为底部的两个项目应位于底部。需要通过质量得分的倒数来衡量monthly_sales

2 个答案:

答案 0 :(得分:1)

@BlairAnderson - 它实际上非常简单。不确定你的postgres版本,但9.1函数在这里创建文档https://www.postgresql.org/docs/9.1/static/sql-createfunction.html

 create function rank_for_order (sales int, score int) returns integer as 
 begin
    return sales / score^2 
     --or any other calc for this here
 end;    

然后在您的查询中,您可以

order by rank_for_order(monthly_sales,quality_score)

或测试

select  rank_for_order(monthly_sales,quality_score) from table

答案 1 :(得分:1)

您可以使用以下方式接近订购:

height

我可以使用以下方式重现排序:

order by monthly_sales / quality_score

2.1和2.4之间的值似乎有效。

然而,这似乎不是一种非常自然或有用的定义排序方式。