我不完全确定这是否是问这个问题的合适地方。希望有人能给出答案或建议。
我经营一家卖商品的小店。我有一个程序/电子表格,可以列出最重要的移动项目。
我可以按售出的总单位数对这些信息进行排序:
Product 1, 15
Product 2, 12
Product 3, 7
…或按销售总额计算:
Product 2, $250.00
Product 1, $75.00
Product 3, $30.00
我想在这两个值之间创建一个组合排名。我有编程(PHP, Python, Perl等)和数据库经验。我想知道是否有某种方法可以通过收入和单位的综合价值来确定排名靠前的人。例如,产品1卖出了更多的产品,但赚的钱却更少。也许产品2更重要。也许可以采用一种基于积分的系统,即每售出一单位可得1.5分,每卖出一美元可得2分。(金钱更重要)
任何想法?
假设您正在使用MySQL,那么这个查询应该非常接近您正在寻找的内容:
SELECT Product,
CAST(1.5*UnitsSold as DECIMAL) + 2*DollarsSold OverallRank
FROM YourTable
ORDER BY OverallRank DESC
SQL Fiddle Demo
如果没有,同样的概念应该在电子表格中工作。
我也不确定这是否是问这类问题的正确地方。似乎你是要求算法或一些标准的业务规则,但对于最终代码。
嗯,我发布了一种提出新想法的方法。我构造了一个算法列表并测试其最大值:
import math
fs = [
('Plain coef', lambda m: math.log(m[1]* units_coef)
+ math.log(m[2]* money_coef) ),
('Coef into log', lambda m: m[1]* units_coef
+ m[2]* money_coef ),
('Coef out log', lambda m: math.log(m[1])* units_coef
+ math.log(m[2]) * money_coef ),
('Coef out log2', lambda m: math.log(m[1],2)* units_coef
+ math.log(m[2],2) * money_coef ),
]
movings = [ ( 'product1', 1500, 75.00 ),
( 'product2', 2, 90000.00 ),
( 'product3', 1200, 8000.00 ),
( 'product4', 6, 4000.00 ),
( 'product5', 500, 1000.00 ),
( 'product6', 800, 1200.00 ),
( 'product7', 300, 800.00 ),
]
units_coef = 1.1
money_coef = 0.04
for (n,f) in fs:
print ''
print n
print '==============================================='
for i in sorted( movings,
key = lambda m: f(m) ,
reverse=True)[:3]:
print i, f(i)
结果:
$ python solds.py
Plain coef
===============================================
('product3', 1200, 8000.0) 12.9537080114
('product6', 800, 1200.0) 10.6511229184
('product5', 500, 1000.0) 9.99879773234
Coef into log
===============================================
('product2', 2, 90000.0) 3602.2
('product1', 1500, 75.0) 1653.0
('product3', 1200, 8000.0) 1640.0
Coef out log
===============================================
('product1', 1500, 75.0) 8.21724195034
('product3', 1200, 8000.0) 8.15857239218
('product6', 800, 1200.0) 7.63667597387
Coef out log2
===============================================
('product1', 1500, 75.0) 11.8549742115
('product3', 1200, 8000.0) 11.7703319309
('product6', 800, 1200.0) 11.0173945564