我有一个包含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
答案 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之间的值似乎有效。
然而,这似乎不是一种非常自然或有用的定义排序方式。